Wie berechne ich die position auf einen Kreis mit einem bestimmten Winkel?

Ich versuche herauszufinden, wie ich könnte in der Lage sein, um die Berechnung der Koordinaten auf einem Kreis. Für Einfachheit habe ich ein paar Bilder.

Wie berechne ich die position auf einen Kreis mit einem bestimmten Winkel?

Beginnt mit Informationen, die ich habe. Jetzt brauche ich für die Ermittlung der neuen Koordinaten, wenn zum Beispiel der Kreis würde dann 90 Grad nach rechts. Genau wie das nächste Bild:

Wie berechne ich die position auf einen Kreis mit einem bestimmten Winkel?

Brauche ich zur Berechnung der Koordinaten des neuen red dot. (Ich brauche auch diesen mit unterschiedlichen Grad wie 20 Grad).

Dazu mein plan war der folgende:

  • Berechnen Sie die Entfernung zwischen den beiden Punkten
  • Berechnen den Grad zwischen der Nord - (oben) und den gegebenen Punkt
  • Berechnen Sie die neue Position mit der Grad (von einem Schritt zurück) + Grad, die es braucht, um (in die Bilder um 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))

Den Teil zur Berechnung der neuen Abschlüsse ist:

double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;

Und der Letzte Teil zum berechnen der neuen Position wäre:

double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));

Jedoch wenn ich diese Berechnungen mit zum Beispiel 0 Grad, die es noch gibt einen anderen Wert als den ursprünglichen Koordinaten.

Jede mögliche Hilfe würde geschätzt!

Bearbeiten 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 ist also der Punkt ist eigentlich nicht zu drehen. Es sollte halten die 490, 728 Koordinaten aber nicht halten die.

  • Warum kann man nicht die Arbeit in Polarkoordinaten die ganze Zeit? Konvertieren kartesischen nur für die Anzeige der Bühne.
  • Ansonsten, dieser link könnte dir helfen: en.wikipedia.org/wiki/Rotation_matrix
  • Sie sind mit x und y die gleichen. Seien Sie vorsichtig, dass x steigt nach rechts, während y steigt nach unten, so dass Ihre targetPt.y - centerPt.y Teil sein sollte, das Gegenteil unter anderem
  • Ein weiteres Problem ist theta += Math.PI/2.0; dass dieser Teil dreht sich in die entgegengesetzte Richtung, die in Ihrem Bild. Verwenden theta -= Math.PI/2.0; statt
InformationsquelleAutor Marc | 2014-09-19
Schreibe einen Kommentar