2012-03-07 14 views
9

Estoy tratando de usar el movimiento browniano para crear un grupo de partículas en movimiento al azar. http://jsfiddle.net/J75Em/16/partícula movimiento browniano con direcciones

Hasta ahora tengo las partículas moviéndose al azar, pero no estoy seguro de cómo establecer la dirección de avance para que se vea más natural.

He intentado usar el cambio en los ejes x e y para calcular la rotación usando atan, puede ver esto al descomentar la rotación, pero parece que no funciona bien.

¿Es este el enfoque correcto para este tipo de movimiento? Gracias;

+0

Si realmente estás usando abejas, solo tengo un juego para ser realmente errático y tener un enjambre seguir al líder. – Incognito

+0

puede manipular las probabilidades un poco para que no sea del todo aleatorio. Como 85% al ​​azar y 15% la última dirección o algo así.Creo que esto lo hará ir un poco más hacia adelante – ajax333221

Respuesta

8

¡Esto es bastante limpio!

Lo está haciendo de la manera correcta, pero en realidad debería usar la función atan2. Esto elimina la necesidad de cualquier 0 controles.

La función atan2 le da un ángulo que es en sentido antihorario de la x positiva vector

(1, 0) --->

las abejas están 90 grados fuera de este ángulo de partida por lo que debe restar 90 grados desde la dirección. (dependiendo de la vuelta que realice el cálculo de dy y dx, puede que necesite agregar)

Puede encontrar que la dirección cambia rápidamente, por lo que podría considerar limitar el siguiente cambio a un conjunto de cambios que provocan un ángulo cambiar debajo de un umbral Esto hará que el movimiento sea un poco más suave.

De hecho lo haré generando un ángulo entre decir -pi/8 y pi/8 radianes, y una longitud aleatoria. Esencialmente usando coordenadas polares. A continuación, agregue este nuevo aleatoria polar desplazamiento a la posición xey como

newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and 
newY = currentY + (randomLength * sin(randomAngle + currentAngle)) 

Si trabaja con ángulos también se puede obtener efectos más naturales como si desea que las abejas a permanecer dentro de un área determinada, puede forzar una sesgo hacia el centro del área a medida que se acercan más y más al borde.

Actualización:

Así que he echado un vistazo más de cerca. El problema es que usted espera .rotar para establecer la rotación cuando en realidad se agrega a la rotación

Hay 2 opciones para solucionar esto.

  1. Girar por la diferencia entre el anterior y el ángulo actual

  2. Establecer la rotación usando el método .transform

Usted puede ver la solución 2 en acción aquí http://jsfiddle.net/c5A2A/

+0

Gracias por la ayuda me232, pensé que la rotación de Rafael, pero estoy empezando a pensar que el movimiento browniano podría no ser adecuado en este caso. Hace que las abejas sean un poco erráticas. Lo he hecho en tu otro método! gracias de nuevo – michael

+0

De hecho me gustaron sus movimientos erráticos, parece que están zumbando :) –

+0

Fiddle no estaba funcionando porque faltaba Raphaël js y una imagen. Aquí hay una actualización rápida: http://jsfiddle.net/brunoimbrizi/c5A2A/54/ – imbrizi

Cuestiones relacionadas