Ich versuche herauszufinden, wie ich Koordinaten auf einem Kreis berechnen könnte. Zur Vereinfachung habe ich ein paar Bilder gemacht.Wie berechne ich die Position auf einem Kreis mit einem bestimmten Winkel?
, dass der Start mit Informationen ist ich habe. Jetzt muss ich die neuen Koordinaten berechnen, wenn sich der Kreis zum Beispiel um 90 Grad nach rechts dreht. Genau wie das nächste Bild:
muss ich die Koordinaten des neuen roten Punkt berechnen. (Ich brauche das auch mit verschiedenen Graden wie 20 Grad).
diesen meinen Plan zu tun war, folgendes zu tun:
- Berechnen Sie den Abstand zwischen den beiden Punkten
- Berechnen Sie den Grad zwischen dem Norden (oben) und dem gegebenen Punkt
- Berechnen Sie den neuen Ort mit dem Grad (von einem Schritt zurück) + die Grad, die es drehen muss (in den Bildern 90 Grad).
Mein erster Schritt ist:
distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
Der Teil der neuen Grad zu berechnen ist:
double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
Und der letzte Teil der neuen Position zu berechnen wäre:
double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
Allerdings wenn ich diese Berechnungen mit zum Beispiel mache 0 Grad gibt es immer noch einen anderen Wert als die ursprünglichen Koordinaten.
Jede Hilfe wäre willkommen!
Edit für Philipp Jahoda:
Meine Werte sind:
distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
und meine Ergebnisse sind:
center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
Wie Sie sehen können, ist der Grad 0, so ist der Punkt nicht sollte sich drehen. Es sollte die 490, 728 Koordinaten behalten, aber es behält diese nicht.
Warum können Sie nicht die ganze Zeit in Polarkoordinaten arbeiten? Nur für die Anzeigestufe in Kartesisch konvertieren. – Bathsheba
Ansonsten könnte dieser Link Ihnen helfen: http://en.wikipedia.org/wiki/Rotation_matrix – Bathsheba
Sie verwenden 'x' und' y' das gleiche. Achten Sie darauf, dass 'x' nach rechts ansteigt, während' y' nach unten ansteigt, so dass Ihr 'targetPt.y - centerPt.y' Teil das Gegenteil von – Eypros