Как уже предложил Пойнти, вы должны воздействовать на вектор скорости точек.
Гравитация — это сила, которая рассчитывается по формуле:
F_G = gamma * mass1 * mass2 / distance^2
Где gamma
— гравитационная постоянная, а mass1
и mass2
— массы объектов. Вы получаете результирующее ускорение с:
F_G = a * mass1
a = F_G / mass1
= gamma * mass2 / distance^2
И вы увидите, что ускорение не зависит от массы движущегося объекта. Остается gamma * mass2
, которому вы можете присвоить произвольную константу. В зависимости от того, что лучше всего соответствует вашим потребностям.
Теперь у нас есть длина вектора ускорения. Направление конечно normalize(cursorPosition - pointPosition)
. Таким образом, общее ускорение равно:
d = cursorPosition - pointPosition
a = constant * d / length(d)^3
Зная это, вы можете обновлять скорость и скорость точки в каждом кадре:
velocity += a * dt
position += velocity * dt
где dt
— продолжительность последнего кадра.
Вот ваш измененный пример кода. Линия if(distance < 6)...
используется для ограничения ускорения (если точка проходит через центр тяжести, она бесконечно ускоряется).
person
Nico Schertler
schedule
14.07.2013