2012-03-07 16 views
9

Sto provando a utilizzare il movimento browniano per creare un gruppo di particelle mobili casuali. http://jsfiddle.net/J75Em/16/movimento browniano delle particelle con le direzioni

Finora ho spostato le particelle casualmente ma non sono sicuro di come impostare la direzione di avanzamento per renderla più naturale.

Ho provato a utilizzare il cambiamento negli assi xe y per calcolare la rotazione utilizzando atan, puoi vedere questo ruotando in modo non commentato ma questo non sembra funzionare bene.

È questo l'approccio giusto per questo tipo di movimento? Grazie;

+0

Se in realtà usi le api, avrei un solo set per essere veramente irregolare e avere uno sciame seguire il leader. – Incognito

+0

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

risposta

8

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.

  1. Ruotare dalla differenza tra il precedente e l'angolo corrente

  2. Impostare la rotazione con il metodo .transform

Si può vedere la soluzione 2 in azione qui http://jsfiddle.net/c5A2A/

+0

Grazie per l'aiuto di me232, ho pensato alla rotazione dei raphaels ma sto iniziando a pensare che il movimento browniano potrebbe non essere adatto in questo caso. Rende le api un po 'irregolari. Ho già fatto al tuo altro metodo! grazie ancora – michael

+0

In realtà mi piacevano i loro movimenti irregolari, sembra che stiano ronzando :) –

+0

Fiddle non funzionava perché mancava Raphaël js e un'immagine. Ecco un rapido aggiornamento: http://jsfiddle.net/brunoimbrizi/c5A2A/54/ – imbrizi

Problemi correlati