Lasciami provare a darti qualcosa tra la risposta di The Light Spark e la risposta di Elliot, perché da quello che ho letto, stai davvero cercando un algoritmo da seguire e non solo la matematica lanciata su di te.
Dichiarazione del problema: dato che hai una posizione A (50, 50)
e un'intestazione (dal momento che non ne hai fornito uno, lo affermerò come y = 2 * x + 25
), trova dove B (80, 90)
è relativo A
e l'intestazione.
Quello che vuoi fare è in realtà abbastanza semplice. 1) Trasferisciti A
all'origine del tuo sistema. Questo significa semplicemente che i A
valori da locale a valori saranno i valori della posizione globale meno i valori della posizione globale di A
. A
diventa (0, 0)
e B
diventa (30, 40)
.
1.1) Anche l'intestazione deve essere spostata. Questo è in realtà molto facile da fare, perché l'intercetta y in A
termini locali è sempre 0 e la pendenza non cambierà, quindi abbiamo y = 2 * x
come rotta.
2) Ora dobbiamo allineare la prua precedente all'asse X. Quindi, come possiamo farlo? Il modo più semplice, concettualmente per farlo, è convertire da coordinate x, y in un sistema di coordinate polari. Il sistema di coordinate polari comporta R
la distanza da una posizione e phi
un angolo di rotazione dall'asse x. R
è definito come sqrt(x^2 + y^2)
ed phi
è definito come atan(y / x)
. La maggior parte dei linguaggi informatici oggigiorno va avanti e definisce una atan2(y, x)
funzione che fa esattamente la stessa cosa atan(y/x)
ma lo fa in modo tale che l'output tenda da -180 gradi a 180 gradi anziché da 0 gradi a 360 gradi, ma entrambi funzionano.
B
così diventa R = sqrt(30^2 + 40^2) = sqrt(2500) = 50
, e phi = atan2(40, 30) = 53.13
in gradi.
Allo stesso modo, l'intestazione ora cambia. Questo è un po 'complicato da spiegare, ma perché l'intestazione, per definizione, passa sempre attraverso la nostra origine A
, non dobbiamo preoccuparci del R
componente. I titoli saranno sempre nella forma di phi = C
dove C
è una costante. In questo caso, phi = atan(2 * x / x) = atan(2) = 63.435
gradi.
Ora, possiamo ruotare il sistema per spostare la direzione sull'asse X del sistema locale A
. Proprio come quando ci siamo trasferiti A
all'origine del sistema, tutto ciò che dobbiamo fare è sottrarre phi
l'intestazione da tutti i phi
valori nel sistema. Quindi il phi
of B
diventa 53.13 - 63.435 = -10.305
gradi.
Infine, dobbiamo riconvertire le coordinate polari in coordinate x, y. Le formule per fare quella trasformazione sono X = R * cos(phi)
e Y = R * sin(phi)
. Per B
conseguenza, si ottiene X = 50 * cos(-10.305) = 49.2
e Y = 50 * sin(-10.305) = 8.9
, così B
in locali-to A
coordinate è vicino a (49,9)
.
Spero che questo aiuti, ed è abbastanza leggero in matematica da seguire.