JavaScript

Создал массив частиц в Canvas через JS, но никак не могу заставить отталкиваться частицы друг от друга...

Как это сделать или может кто знает где можно посмотреть информацию по этому вопросу.
спасибо
Тебе нужно решить задачу, или ты хочешь разобраться, как это работает?

Если первое - используй particles.js
Если второе - этот вопрос гораздо обширней, понадобиться много знаний из JS и математики.
Сергей Неважно
Сергей Неважно
16 079
Лучший ответ
Владимир Кожемяко второе. но где взять информацию именно по этому вопросу? вроде запрос простой, а поисковик не выдаёт ничего дельного...
Формула для силы притяжения: F = G*M*m/R², это физика примерно девятого что ли класса. Берёшь эту силу и направляешь в обратную сторону. Константу G и массы частиц подгони так, чтобы получать нужную скорость.
Или тебе нужно не отталкивание, а просто обсчёт столкновения? Если частицы круглые, то когда расстояние между центрами меньше суммы их радиусов, то они не только столкнулись, но и вошли друг в друга. Так может случиться, если у тебя перемещение сразу на несколько пикселей, скачками (на большой скорости может случиться, смотря как ты движение обсчитываешь, JS больше 60 fps вроде не даёт, а у тебя может быть нужно прыгнуть дальше 60 пикселей за секунду). Расстояние между двумя точками посчитать, думаю, не проблема, это по теореме Пифагора. И если они столкнулись, считай направление нормали к повернхости и отзеркаливай относительно неё вектор скорости так, чтобы угол падения был равен углу отражения. Результирующую скорость каждой частицы (если массы разные) считай, например, по абсолютно упругому столкновению.
Это же всё проходили на физике в районе девятого класса: импульс, энергия, сила упругости, проекции векторов на оси.
Владислав Лях
Владислав Лях
84 198
я бы наверно сделал так.
каждая частица - объект, у которого есть
- координаты
- вектор движения в двухмерном пространстве, относительно начала кординат
- скорость движения
- расстояние до каждой другой частицы

при уменьшении расстояния до 0 (1,2,3 хз) вектора частиц меняются на противоположные
mathprofi.ru/vektory_dlya_chainikov.html

когда я писал игру, то каждый раз, когда перерисовывал пространство - искал уменьшение расстояний между объектами до 0.
при этом для каждого объекта запоминал старые коордаинаты, которые были до этого, и возвращал объект на них в случае столкновения.

но направление не менял. тут несколько посложнее
SI
Smailik Id161872524
3 760
Владимир Кожемяко как заставить каждую частицу отслеживать расстояние до всех других? мои попытки перебирать каждый i-тый объект массива частиц никак не увенчивается успехом...