La propagación de una onda en dos dimensiones, está descrita por la ecuación de onda:
Para hacer la simulación, y contando como siempre, con que usar Javascript en un navegador no nos da toda la potencia que nos gustaría, lo que haremos es cambiar derivadas por incrementos y dividir el plano en una rejilla de puntos. La función que aparece en las ecuaciones como u, supondremos que es una función escalar que depende de x e y.
Para entender cómo funciona esto, podemos imaginar que en cada punto de la rejilla, hay una varilla vertical con una bolita ensartada, que puede desplazarse hacia arriba o hacia abajo. El valor de la función u en ese punto, representa la altura de esa bolita. La derivada de u respecto del tiempo, sería la velocidad instantanea con la que sube o baja por la varilla. Y la derivada segunda, sería la aceleración, que se calcula en cada iteración en función de la altura de las bolitas de alrededor. En cierto modo es como si cada bolita estuviese unida a sus vecinas con gomas elásticas, de manera que si sus vecinas están más altas, tirarán de ella hacia arriba, y si están más bajas tirarán hacia abajo.
Estas gomas de las que hablo, están representadas por las derivadas espaciales con respecto a x e y, más concretamente por el laplaciano, que también calculamos con incrementos para simplificar. Calculado esto para cada punto, lo multiplicamos por la velocidad de propagación, para obtener la «aceleración» vertical de la bolita. El resto es lo típico, la aceleración la sumamos a la velocidad y la velocidad a la posición.
Además he añadido un cierto coeficiente de amortiguamiento para que la onda vaya perdiendo energía y acabe por disiparse completamente.