2012-09-27 1 views
5

Voglio fare un'animazione in javascript dove un oggetto si muove su un percorso. Per questo ho bisogno di una funzione che mi restituisce le coordinate X/Y sul percorso per un dato tempo. Il percorso deve essere un triangolo con bordi sfumati.Funzione per ottenere coordinate X/Y per muovere su triangolo con bordi smussati

All'inizio dell'animazione dovrebbe spostarsi lentamente nel percorso del triangolo - ma questo potrei risolvere magari in una funzione diversa .. per me è più importante la funzione che può restituirmi le coordinate X/Y per il movimento sul triangolo.

L'animazione dovrebbe quindi andare in loop senza fine sul percorso del triangolo.

the animation path

Ci sono (online) strumenti per creare le coordinate di tale animazione?

Qualcuno può aiutarmi con la funzione?

+0

proverei una [curva di inseguimento] (http://en.wikipedia.org/wiki/Pursuit_curve), dove segue il cursore del disegno un punto invisibile che si muove su un percorso a triangolo rigido a una certa distanza, attenuando così i bordi. Ciò consentirebbe anche di facilitare il triangolo. –

+0

Consiglierei un ciclo di Beziers in soccorso, sono ben documentati e facilmente implementabili e puoi ottenere la posizione esatta in qualsiasi momento. Tuttavia, hanno una fastidiosa proprietà di non mantenere una velocità costante lungo il percorso e la tua animazione sarà molto più lenta alle estremità arrotondate che lungo i bordi. – Lyth

+0

una [superformula] (http://en.wikipedia.org/wiki/Superformula) con a = 3 potrebbe aiutare – Bergi

risposta

1

Suggerirei qualcosa come sqrt(x²+y²)=2.5+sin(atan2(y,x)*3)/5 - polare: ρ(θ)=2.5+sin(3θ)/5. È un semplice sistema di coordinate polari, e l'aggiunta di un'onda sinusoidale compressa (3 periodi per giro) su un cerchio:

θ(t) = t // angle 
ρ(t) = 2.5 + 0.2 * sin (t * 3) // radius 
// of course, you can play with the parameters :-) 

Si può facilmente convert those polar coordinates into cartesion ones.

L'animazione all'inizio, spostandosi dal centro verso il percorso, richiederebbe naturalmente una funzione aggiuntiva. Tuttavia, potrebbe essere fatto con la stessa meccanica - lasciando fuori la parte del cerchio: ρ(θ)=2.5*sin(3θ)

+0

Grazie - questo è esattamente quello di cui avevo bisogno. Ecco un prototipo: http://jsfiddle.net/qgPVn/4/ Sto ancora lavorando all'inizio dell'animazione .. Non appena ho risolto questo problema, accetterò la tua risposta! – Benjamin