2017-10-04 1 views
0

Ich habe ein Programm, wo ich zwei Linien zeichnen kann, wenn ich den Start- und Endpunkt für diese Linien ausgewählt habe, berechnet es den Punkt, wo sie sich schneiden werden. Ich möchte eine Linie zeichnen, ausgehend vom Schnittpunkt, genau in der Mitte dieser beiden Linien.java zeichne Linie auf Schnittpunkt von zwei Linien

example

im Winkel zwischen den beiden Linien wie diese Berechnung:

double angle(Line pL1, Line pL2){ 
    double angle = Math.toDegrees(Math.atan2(pL2.p1.y - pL1.p1.y, pL2.p1.x - pL1.p1.x)); 
    if(angle < 0){ 
     angle += 360; 
    } 
    return angle; 
} 

und erzeugen dann die neue Linie wie folgt aus:

double newAngle = Math.toRadians(drawAngle); 
    System.out.println(newAngle); 
    double x = pI.x + 80 * Math.sin(newAngle); 
    double y = pI.y + 80 * Math.cos(newAngle); 
    Point2D.Double endPoint = new Point2D.Double(x,y); 
    Line l3 = new Line(pI,endPoint); 

wo pI ist der Punkt, Kreuzung. Die Zeile endet jedoch immer mit dem falschen Winkel. Wie kann ich diesen Code so umschreiben, dass die Linie exakt zwischen den beiden anderen Linien gezeichnet wird, wie im obigen Beispielbild?

EDIT:

Ausgabe: example2

+0

Können Sie uns bitte zeigen die visuelle Ausgabe Ihrer Methode? – Maia

+0

@Maia hinzugefügt die Ausgabe – FrankK

+0

Welcher Punkt ist Punkt eins auf den beiden Linien? Wo soll die Linie hin? Vielleicht fügen Sie es in einer anderen Farbe hinzu. – matt

Antwort

0

Ich weiß nicht, was Sie mit dem Winkel tun, aber ich denke, der zweite Punkt, den Sie wollen, ist:

double y = 0.5*(pL2.p1.y + pL1.p1.y); 
double x = 0.5*(pL2.p1.x + pL1.p1.x); 

Der Winkel Sie berechnen, ist der Winkel, den eine Linie durch den ersten Punkt jeder Linie zieht. Das scheint nicht relevant zu sein.

+0

das ist es, danke – FrankK

0

Um die Winkelhalbierende aus zwei Linien zu finden, müssen Sie die Einheitsrichtungsvektoren für diese Linien berechnen.

len1 = Sqrt((pL1.p1.y - pL1.p2.y)^2 + (pL1.p1.x - pL1.p2.x)^2) 
dx1 = (pL1.p2.x - pL1.p1.x)/len1 
dy1 = (pL1.p2.y - pL1.p1.y)/len1 
similar for the second line 

bx = (dx1 + dx2)/2 
by = (dy1 + dy2)/2 

und der zweite Punkt für Halbierungs ist

point.x = pI.x + 100.0 * bx 
point.y = pI.y + 100.0 * by 
Verwandte Themen