2016-12-01 4 views
0

Ich arbeite gerade an einem Projekt, in dem ich ein nicht-rechtes Dreieck in der Mitte eines mit java.awt.Graphics 's drawLine() oder drawPolygon() Methoden zeichnen muss. Beide Methoden erfordern die Koordinaten aller Punkte, um zu funktionieren. Mein Problem ist, dass anstelle von Punkten alles, was ich habe, alle Winkel und Seitenlängen des Dreiecks sind. Ich habe ein geschicktes Diagramm erstellt, was ich hoffe, hilft Ihnen, mein Problem zu visualisieren:Java Berechnungspunkte von Winkeln in einem nicht rechtwinkligen Dreieck

enter image description here

(EDIT die Position von C in diesem Senario nicht betwen eine feste und b und kann irgendwo unterhalb der Achse sein auf dem AB ruht)

Wie Sie aus meinem Bild sehen können, brauche ich die Koordinaten von C basierend auf den Koordinaten von A, gibt es eine Möglichkeit, dies zu berechnen, vorausgesetzt, die Längen aller Seiten und Winkel der nicht rechts Dreieck?

Bonus: Wie würde ich einen (x, y) Wert für A finden, der das Dreieck in der Mitte des JFrame effektiv zentrieren würde?

+1

Verwenden Sie Trigonometrie. Es ist ein fast triviales Problem. Wenn Sie es nicht studiert haben, müssen Sie wirklich für 2D zeichnen. –

+0

Gegeben die Koordinaten von 'A', die Koordinaten von' C' können vollständig durch die Länge 'b' und den Winkel bei' A' bestimmt werden - es ist eine einfache Liniengleichung; Die Tatsache, dass es ein Teil eines Dreiecks ist, ist nicht einmal relevant, bis Sie versuchen, das Zentrum zu bestimmen. Ich würde alle Berechnungen mit 'A' an den Koordinaten' 0,0' beginnen, dann _translate_ das Ergebnis. Mitte eines Dreiecks: http://www.dummies.com/education/math/trigonometry/how-to-pinpoint-the-center-of-a-triangle/ –

+0

Ich wünschte wirklich, dass jemand nur die Antwort anstatt gerade posten würde Kommentieren, dass die Antwort Trigonometrie ist ... –

Antwort

1

Wenn Sie Winkel CAB wissen, die Koordinate des Punktes C sein sollte:

(x+b·sin(θ), y-b·cos(θ)) 

In Java gibt es:

double Math.sin(double radians); 
double Math.cos(double radians); 

Beachten Sie, dass der Winkel in Radiant sein muss. Wenn Ihre Winkel in Grad sind, versuchen Sie:

double Math.sin(Math.toRadians(double degrees)); 
double Math.cos(Math.toRadians(double degrees)); 

Ich hoffe, dies hilft.

+0

Danke! Ich empfehle, deine Antwort mit einem Foto zu überarbeiten, das darstellt, was Theta in diesen beiden Kontexten ist, wenn du erst einmal einen guten Ruf hast. –