Nehmen wir an, ich habe eine (x, y), die immer gleich ist für den Startpunkt einer Linie und eine (x, y), die für den Endpunkt der gleichen ändert Linie. Die Linie ist auch immer 40px lang. Am Anfang des Programms beginnt die Linie in einer vertikalen Ausrichtung (nennen wir es 0 Grad). Basierend auf einer Benutzereingabe muss die Linie um eine bestimmte Gradzahl von ihrem Ursprung neu gezeichnet werden, indem nur das Ende (x, y) geändert wird.Zeichnen Sie eine Linie in einem bestimmten Winkel in Java
etwas mehr DENKANSTOSS wenn Sie es brauchen:
ich in einer Furche bin versucht, dies zu berechnen und sie in Java arbeiten zu lassen. Ich kann die Mathematik dazu bringen, den Punkt basierend auf der Bogenlänge eines Kreissegments zu berechnen, aber ich weiß nicht, wie ich Java dazu bringen soll.
Ich denke, es würde einfacher funktionieren basierend auf einem Dreieck Winkel, da ich immer die Länge von zwei Seiten eines Dreiecks (eine Seite durch die 40px lange Linie und die andere Seite durch den Startpunkt dieser Linie und die Grenze der JPanel) und der Winkel, den diese beiden Linien bilden. Trotzdem ist mein Gehirn muffig, um es herauszufinden. Jede Hilfe würde sehr geschätzt werden.
UPDATE:
@casablanca hat mich auf dem richtigen Weg. Ich habe meine trigonometrischen Funktionen verbessert und hier habe ich es zum Laufen gebracht.
Zunächst einmal habe ich nicht realisiert, dass 90 Grad geradeaus war, aber sobald ich erkannte, dass ich meine Lösung diese Tatsache widerspiegeln. Ich zeichnete meine Linie ausgehend von der unteren Mitte des Rahmens aus. Da die opposite
Seite des Dreiecks ist auf der rechten Seite des Bildschirms, wenn der Winkel von meinem Benutzer gegeben ist weniger als 90 Grad und ist auf der linken Seite des Bildschirms, wenn der Winkel von meinem Benutzer gegeben ist größer als 90 Grad ich hatte Um die Formel anzupassen, um diese Tatsache zu berücksichtigen, habe ich vier Methoden, eine für die x
Koordinate auf der linken Seite des Bildschirms (wenn der Benutzer gegeben Winkel größer als 90 Grad), eine für die y
Koordinate auf der linken Seite des Bildschirms (wenn der vom Benutzer angegebene Winkel größer als 90 Grad ist) und das Gleiche für die rechte Seite des Bildschirms, wenn der vom Benutzer angegebene Winkel weniger als 90 Grad beträgt. Die int length
in allen Methoden ist die Länge der Hypotenuse. Nochmals vielen Dank für Ihre Hilfe @casablanca!
public double leftSideX(double angle, int length){
double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return x;
}
public double leftSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return y;
}
public double rightSideX(double angle, int length){
double x = frameWidth/2 + (length * Math.cos(angle));
return x;
}
public double rightSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(angle));
return y;
}
Sehen Sie sich auch die Grafikkontext der Transformation zu verändern, hier: http://stackoverflow.com/questions/3420651 – trashgod
Vielleicht möchten Sie Einkapseln dies berücksichtigen Funktionsfähigkeit in einer Klasse; z.B. Vektor2D. Auf diese Weise können Sie ein Vector2D mit x- und y-Koordinaten oder einer Länge und einem Winkel konstruieren und Methoden wie getMagnitude(), getAngle(), getX(), getY(), rotateClockwise (double) usw. bereitstellen. – Adamski
würde ich Liebe zu, aber ich denke, das ist ein bisschen über meine Fähigkeit jetzt. Ich brauchte fast einen ganzen Tag, um das herauszufinden :) – ubiquibacon