Sto cercando di capire come potrei essere in grado di calcolare le coordinate su un cerchio. Per semplicità ho fatto alcune immagini.Come calcolare la posizione su un cerchio con un certo angolo?
Questo è l'inizio con le informazioni che ho. Ora ho bisogno di calcolare le nuove coordinate quando per esempio il cerchio ruoterebbe di 90 gradi verso destra. Proprio come l'immagine successiva:
ho bisogno di calcolare le coordinate del nuovo punto rosso. (Ho anche bisogno di questo con diversi gradi come 20 gradi).
Per fare questo il mio piano era quello di effettuare le seguenti operazioni:
- calcolare la distanza tra i due punti
- calcolare il grado tra il nord (verso l'alto) e il punto dato
- calcolare la nuova posizione con la laurea (da un passo indietro) + i gradi che deve girare (nelle immagini di 90 gradi).
Il mio primo passo è:
distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
La parte per il calcolo dei nuovi gradi è:
double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
E l'ultima parte per calcolare la nuova posizione sarebbe:
double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
Tuttavia quando faccio questi calcoli con per esempio 0 gradi restituisce ancora un altro valore rispetto alle coordinate originali.
Qualsiasi aiuto sarebbe apprezzato!
Modifica per Philipp Jahoda:
I miei valori sono:
distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
ei miei risultati sono i seguenti:
center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
Come si può vedere, il grado è 0 in modo che il punto non è dovrebbe girare. Dovrebbe mantenere le coordinate 490, 728 ma non le mantiene.
Perché non puoi lavorare in coordinate polari per tutto il tempo? Converti in cartesiano solo per la fase di visualizzazione. – Bathsheba
Altrimenti, questo link potrebbe aiutarti: http://en.wikipedia.org/wiki/Rotation_matrix – Bathsheba
Stai utilizzando 'x' e' y' lo stesso. Fai attenzione che 'x' sta aumentando verso destra mentre' y' sta aumentando verso il basso così la tua parte 'targetPt.y - centerPt.y' dovrebbe essere l'opposto tra le altre cose – Eypros