Я реализовал сетку векторов в 2D (на самом деле в Obj-C, но я полагаю, что это не зависит от языка), который я могу заполнить, например, симплексным шумом, чтобы сгенерировать поле потока за частицы.
Я много искал и гуглил, но так как я не эксперт по математике, я не могу найти способ заполнить свою сетку вихревым (или, по крайней мере, круглым) полем потока.
Для кругового потока я думал о том, чтобы получить свои векторы из касательных кругов, идущих от внешних линий сетки к внутренним.
Но для вихря я просто не могу найти никакого решения самостоятельно.
Вихрь должен быть симметричным и центрироваться в моей сетке, но если есть простой способ сделать его асимметричным в той же сетке, хорошо …
Еще несколько вопросительных знаков на поле. Но если я вас правильно понял, это поле скоростей, которое вы хотите. Другими словами, скорость в каждой вершине.
Для кругового поля вам нужно только взять ортогональный вектор относительного положения, чтобы создать круговое поле.
v_t = (Py-Ry,Rx-Px)
где P
это положение вершины и R
это центр поля. Суффикс x и y это просто соответствующие координаты.
Чтобы добавить радиальный компонент в поле скоростей, просто добавьте некоторую скорость в радиальном направлении. Я не могу сказать, будет ли это стабильным, когда вы будете имитировать.
Радиальное направление легко описывается как
v_r = (Rx-Px,Ry-Py)
и использование
v = a*v_r+(1-a)*v_t
с хорошим значением для a
, вероятно, довольно низкий.
Других решений пока нет …