Spostamento di un oggetto in un percorso circolare


26

Voglio spostare un oggetto (punto) in un percorso circolare. Come devo modificare le coordinate X e Y per ottenere questo risultato?

Risposte:


54

Puoi farlo usando la matematica semplice:

X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;

(originX, originY) è il centro della tua cerchia. il raggio è il suo raggio. Questo è tutto.

Questo funziona perché seno e coseno sono matematicamente correlati al cerchio unitario .

relazione tra seno e coseno con il cerchio unitario
Credito di immagine: LucasVB (opera propria) [dominio pubblico], tramite Wikimedia Commons . (Ridotto al 70%.)


E se fosse un ovale? Cioè nessun raggio impostato.
prova il

2
@test: se l'ovale è orientato su X o Y, è possibile moltiplicare la posizione dell'asse corrispondente per un fattore aggiuntivo. Se hai bisogno di maggiori dettagli, dovresti porre una domanda separata.
Kromster dice di sostenere Monica il

@Anko: non penso che l'animazione lo spieghi meglio, ma lascia che sia, per chi ne ha bisogno. Convertito in CW.
Kromster dice di sostenere Monica

@Kromster che ne dici di ottenere lo stesso risultato nello spazio 3d?
Tomas,

14

Puoi usare l'equazione parametrica come indicato da Krom. Per capire perché abbiamo usato questa formula devi capire qual è l'equazione. Questa equazione deriva dall'equazione parametrica del cerchio .

Considerando che il cerchio viene disegnato con il centro sull'origine (O) come mostrato nel diagramma seguente Cerchio

Se prendiamo un punto "p" sulla circonferenza del cerchio, avente un raggio r.

Lascia che l'angolo creato da OP (Origin to p) sia θ. Lascia che la distanza di p dall'asse x sia y Lascia che la distanza di p dall'asse y sia x

Usando i presupposti di cui sopra otteniamo il triangolo come mostrato di seguito: triangolo

Ora sappiamo che cos θ = base / ipotenusa e peccato θ = perpendicolare / ipotenusa

che ci dà cos θ = x / r e sin θ = y / r

:: x = r * cos θ e y = r * sin θ

Ma se il cerchio non è all'origine e piuttosto in (a, b) allora possiamo dire che il centro del cerchio è spostato

a unità nell'asse x
unità b nell'asse y
Quindi per un tale cerchio possiamo modificare di conseguenza l'equazione parametrica aggiungendo lo spostamento sull'asse xey dandoci le seguenti equazioni:

x = a + (r * cos θ)
y = b + (r * sin θ)


Dove a & b sono le coordinate x, y del centro del cerchio.

Quindi abbiamo trovato xey le coordinate del punto sulla circonferenza del cerchio con raggio r


2
Grazie, davvero bella e breve risposta per questo problema, pollice in alto
Ali.Ghodrat

5

C'è un altro trucco, in cui usi le formule sin (x + a) e cos (x + a), e che ti permette di calcolare sin (a) e cos (a) - un essere l'angolo con cui vuoi muoverti dalla tua posizione attuale - solo una volta e fai semplicemente moltiplicazioni e aggiunte ad ogni passaggio.

sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.

Naturalmente, ciò presuppone una velocità angolare costante.

Attenzione però alla precisione aritmetica limitata. Ho osservato in passato un movimento "circolare" implementato in quel modo che avrebbe disegnato una spirale a seguito di arrotondamenti occasionali ripetuti nel tempo. Potrebbe essere necessario ripristinare la posizione su (x0, y0) dopo ogni giro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.