2017-07-26 2 views
-3

enter image description here Ich muss die erste Zeile mit der Position des Fingers zeichnen. Später muss ich die zweite parallele Linie mit der Position des Fingers zeichnen. Ich habe es schon getan. Und die Hauptaufgabe ist es, die dritte senkrechte Linie zwischen diesen parallelen Linien zu zeichnen. Wie kann ich die dritte Zeile zeichnen?Wie zeichne ich eine gerade senkrechte Linie zwischen zwei anderen parallelen Linien?

+1

Was ist also die Frage anders als einige Aussagen zu machen? –

+0

Ist das eine Frage der (schnellen) Programmierung oder der Geometrie/Mathematik? –

+0

@ElTomato Wie zeichnet man eine senkrechte Linie zwischen parallelen Linien? – kvv

Antwort

0

Wenn Sie 2 parallele Linien haben und eine senkrechte Linie zwischen ihnen ziehen möchten, benötigen Sie 1 zusätzlichen Punkt. Angenommen, dieser Punkt befindet sich in der Mitte der ersten Zeile (nennen Sie es C).

Auch gehen wir davon haben die folgenden:

L1 // Represents the first line 
L2 // Represents the second line 
L1.start // Represents the line start point CGPoint 
L1.end // Represents the line end point CGPoint 

Jetzt wollen Sie L1 eine senkrechte Linie an der ersten Linie zeichnen und zu tun, müssen Sie seine normal erhalten, die in 2D ist ziemlich einfach. Ermitteln Sie zuerst die Linienrichtung, indem Sie den Anfangs- und Endpunkt einer gegebenen Linie direction = CGPoint(x: L1.end.x-L1.start.x, y: L1.end.y-L1.start.y) subtrahieren. Jetzt die normal zu bekommen, müssen wir einfach Koordinaten invertieren und teilen sie durch Richtungslänge:

let length = sqrt(direction.x*direction.x + direction.y*direction.y) 
let normal = CGPoint(x: -direction.y/length, y: direction.x/length) // Yes, normal is (-D.y, D.x) 

So sagte, als der Startpunkt ist C jetzt müssen wir nur den Endpunkt auf der anderen Leitung finden, die C + normal*distanceBetweenLines ist. Also brauchen wir den Abstand zwischen den zwei Linien, die am besten durch Punktprodukt erhalten werden ...

Zuerst brauchen wir einen Vektor zwischen einem beliebigen Punktpaar aus den zwei Linien (ein Punkt in der ersten Zeile und der andere auf der zweite Reihe). Werfen wir also

let between = CGPoint(x: L1.start.x-L2.start.x, y: L1.start.y-L2.start.y)

Jetzt müssen wir diese Linie normal mit Punktprodukt projizieren die Länge des Vorsprungs zu erhalten, die die Länge zwischen den beiden Linien

let distanceBetweenLines = between.x*normal.x + between.y*normal.y.

So, jetzt haben wir alle Punkte senkrechte Linie zwischen zwei bestimmten Linien zu zeichnen die Linien unter der Annahme sind parallel:

L3.start = C 
L3.end = CGPoint(x: C.x + normal.x*distanceBetweenLines, y: C.y + normal.y*distanceBetweenLines) 
Verwandte Themen