Questo è abbastanza bello!
Si sta procedendo nel modo giusto ma si dovrebbe effettivamente utilizzare la funzione atan2. Questo rimuove la necessità di 0 assegni.
La funzione atan2 dà un angolo che è antiorario dal vettore x positivo
(1, 0) --->
Le api sono 90 gradi fuori da questo angolo iniziale quindi è necessario sottrarre 90 gradi dalla direzione. (a seconda del modo in cui esegui il calcolo dy e dx, potresti dover aggiungere)
La direzione può cambiare rapidamente, quindi potresti considerare di limitare la modifica successiva a un insieme di modifiche che causano un angolo cambia sotto qualche soglia. Questo renderà il movimento un po 'più agevole.
In realtà, dovrei farlo generando un angolo tra i radiazioni -pi/8 e pi/8 e una lunghezza casuale. Essenzialmente usando le coordinate polari. Quindi aggiungere questo nuovo casuale polare di offset alla posizione xey come
newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and
newY = currentY + (randomLength * sin(randomAngle + currentAngle))
Se si lavora con angoli è anche possibile ottenere effetti più naturali, come se si desidera che le api a rimanere all'interno di una certa area, è possibile forzare un pregiudizi verso il centro dell'area man mano che si avvicinano sempre di più al limite.
Aggiornamento:
Quindi ho dato un'occhiata più da vicino. Il problema è che ci si aspetta .rotate per impostare la rotazione quando effettivamente aggiunge alla rotazione
Ci sono 2 opzioni per il fissaggio di questo.
Ruotare dalla differenza tra il precedente e l'angolo corrente
Impostare la rotazione con il metodo .transform
Si può vedere la soluzione 2 in azione qui http://jsfiddle.net/c5A2A/
fonte
2012-03-07 16:25:31
Se in realtà usi le api, avrei un solo set per essere veramente irregolare e avere uno sciame seguire il leader. – Incognito
puoi manipolare un po 'le probabilità in modo che non sia del tutto casuale. Come l'85% casuale e il 15% l'ultima direzione o qualcosa del genere.Penso che questo andrà un po 'di più nella direzione in avanti – ajax333221