in realtà non hanno bisogno di Trigs per questo. Basta usare pendenze o cambiare in x
e .
Data una linea di pendenza m = y/x
, la linea perpendicolare a tale linea ha la pendenza -1/m
o -x/y
.
La pendenza m tra i punti rossi è -150/150
o -1/1
. Ho notato i tuoi positivi y
punti giù.
Pertanto, la pendenza positiva è 1/1
. Entrambe le tue xey cambia alla stessa velocità, con la stessa quantità.
Una volta che lo sai, allora dovrebbe essere abbastanza facile capire il resto. Poiché sono allineati a 45 gradi, il rapporto del bordo del triangolo 45-45-90
è 1 : 1 : sqrt(2)
. Quindi se la tua lunghezza è 20
, la singola modifica xey sarà 20/sqrt(2)
o approssimativamente 14
in numeri interi.
Quindi, i due punti gialli corrispondono a (36, 236)
e (64, 264)
. Se le linee non sono allineate a un livello adeguato, è necessario utilizzare arctan()
o qualcosa di simile e ottenere l'angolo tra la linea e la linea orizzontale, in modo da poter calcolare il rapporto tra x e y.
Spero che la mia risposta non sia stata troppo difficile da seguire. Per una soluzione più generale, vedi la risposta di Troubadour.
Edit: Poiché il PO detto punto rosso inferiore è effettivamente in rotazione attorno al punto rosso superiore, avremo bisogno di una soluzione più flessibile invece.
Ho intenzione di estendere questa risposta da quella di Troubadour, poiché sto facendo esattamente la stessa cosa. Si prega di fare riferimento al suo post mentre leggi il mio.
1. Ottenere il vettore di origine (200, 100) il punto rotante (50, 250):
vector = (200 - 50, 100 - 250) = (150, -150)
2. Ruotare i vettori scambiando la x ed y, e negare x per ottenere il nuovo vettore:
vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150)
3. Ottenere il versore (di lunghezza 1) dal nuovo vettore:
vector = vector/length(vector)
= (150/length(vector), 150/length(vector))
~= (0.7071, 0.7071)
where
length(vector) = sqrt(150^2 + 150^2) ~= 212.2320
4. garantita vettore spostamento di lunghezza 20, moltiplicando il vettore unitario.
displacement_vector = vector * 20
= (0.7071 * 20, 0.7071 * 20)
= (14.1421, 14.1421)
5. Aggiungi/sottrarre questo vettore al/dal vettore rotante (punto):
yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254)
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236)
Spero che i passaggi precedenti aiutano a formulare il proprio codice. Non importa quale sia l'angolo in cui si trova, stessi passi.
È vero per tutti i tuoi problemi che saranno allineati a 45 gradi? –
scusa, non sono sicuro di cosa stai chiedendo. la matematica non è DAVVERO il mio forte seme. nel diagramma sopra, x: 200, y: 100 fungerà da punto di ancoraggio. quando il diagramma sta girando, mi piacerebbe conoscere la formula per ottenere le coordinate dei punti gialli indipendentemente dall'angolo che stanno facendo i punti rossi. Spero che abbia un senso. – TheDarkIn1978
Ah, quindi non è fissato a quell'angolo. Ok, è tempo di scrivere quella soluzione vettoriale rotante! –