Pull to refresh

Comments 8

всё-таки в результате это больше желе чем вода 🥴

Мне больше показалось похоже на неньютоновскую жидкость

Потому что уравнения Навье-Стокса описывают потоки в толще жидкости.

А волны на поверхности жидкости описываются уравнением Кортевега-де Фриза. И форма волн, и их характер там совсем другие.

итеративный -> итерационный, нестабильность -> неустойчивость, симуляция -> моделирование, адвекция лучше как конвекция

Это всё блекнет на фоне "завитки и расхождение" :) (curl and divergence)

Попробуйте вместо такого алгоритма

p_new[i, j] =((p[i+1,j] + p[i,j+1] + p[i-1,j] + p[i,j-1]) - Velocity_Divergence[i, j])/4

использовать алгоритм распространения волны: https://ru.wikipedia.org/wiki/Волновое_уравнение

Для этого нужно два поля вместо одного - поле высот P и поле скоростей изменения высот V.

Вычисления нужно производить за два этапа. На первом этапе (∂²H/∂x²) для каждой ячейки V вычисляем:

V[x,y] += (P[x+1,y] - P[x,y] + P[x-1,y] - P[x,y] + P[x,y+1] - P[x,y] + P[x,y-1] - P[x,y]) * dt * 0.99;

Если точка P[x-1,y] за пределами массива, то выбрасываем пару: + P[x-1,y] - P[x,y]

На втором этапе (∂²H/∂t²) вычислям все P:

P[x,y] += V[x,y] * dt * 0.99;

И никаких p_new! Пишем в это же поле!

Физическое воздействие выполняем так:

V[x,y] += F/m * dt;

F - сила, m - масса (плотность) воды, dt - промежуток времени, 0.99 - коефициент затухания

Важно использовать везде +=, а не = !!!

Sign up to leave a comment.

Articles

Change theme settings