Un entendimiento de los conceptos de oscilación, amplitud y frecuencia/periodo suele ser necesario en el curso de la simulación de comportamientos reales. Sin embargo, hay una forma un poco más fácil de reescribir el ejemplo anterior con el mismo resultado. Echemos un vistazo más a nuestra fórmula de oscilación:
var x = amplitude * sin(TWO_PI * frameCount / period);
Y vamos a reescribirla de una manera un poco diferente:
var x = amplitude * sin(un valor que incrementa lentamente);
Si nos preocupa definir precisamente el periodo de oscilación en términos de cuadros de animación, podríamos necesitar la fórmula de la manera en que la escribimos primero, pero fácilmente podemos reescribir nuestro ejemplo usando el concepto de velocidad angular (y aceleración) de la lección de movimiento angular. Al suponer que:
var angle = 0;
var aVelocity = 0.03;
...en draw(), podemos simplemente decir que:
angle += aVelocity;
var x = amplitude * sin(angle);
...donde angle es nuestro “un valor que incrementa lentamente”.
Aquí está nuestro programa modificado: 
Solo porque no lo estamos refiriendo directamente no significa que hemos eliminado el concepto de periodo. Después de todo, mientras más grande sea la velocidad angular, más rápido oscilará el círculo (por lo tanto, disminuirá el periodo). De hecho, el número de veces necesarias para sumar la velocidad angular para llegar a TWO_PI es el periodo o:
periodo = TWO_PI / velocidad angular
Vamos a ampliar un poco más este ejemplo y crear un objeto Oscillator (Oscilador en inglés). Y vamos a suponer que queremos que la oscilación ocurra a lo largo del eje x (como arriba) y del eje y. Para hacer esto, necesitaremos dos ángulos, dos velocidades angulares y dos amplitudes (una para cada eje). ¡Otra oportunidad perfecta para PVector!
Lee el código en el siguiente programa: 

Este curso de "Simulaciones Naturales" es un derivado de "La Naturaleza del Código" por Daniel Shiffman, usado bajo una Licencia Creative Commons Reconocimiento-NoComercial 3.0 Unported.