Не могу понять в чем бага....blitz
просьба бэсик говно - не писать
мож, кто какие костыли придумает?
Кроме того прикинь на сколько у тебя смещаются планеты за один кадр. Если это расстояние больше 1/10 от расстояния между планетами то точность алгоритма будет плохой.
Ну и последнее, если две планеты сильно сблизятся, то из-за дискретности алгоритма они приобретут слишком большое ускорение на один кадр и очень быстро разлетятся. Как решение можно уменьшать dt.
Но это в реальном мире. А в дискретном в какой-то момент окажется, что планеты слишком близко. Они приобретут очень большое ускорение и вместо того, чтобы в центре встретится, они из него разлетятся с очень большими скоростями.
я ща убрал задержку между кадрами - получилось неплохо
еще теперь дельта т делится на 1000 - как бы замедление времени в 1000 раз
но теперь главная задача - как красиво обойти бесконечности?
планеты действительно сильно сближаются и потом улетают в бесконечность
есть идея с пробросом их через друг друга при сближении на минимальное расстояние, т.е. вместо одной планеты ставим другую...хотя это плохо - вся картина рушится
Можно придать им начальные скорости так, чтобы они стабильно вращались не сближаясь. Для двух это легко. Для трех тоже можно, по крайней мере у Солнца Земли и Луны получается. Еще можно уменьшать dt с уменьшением расстояния между планетами, но если они слипаются, а не просто пролетают рядом, то это не поможет.
для двух тел все работает замечательно - тела вертятся вокруг центра масс
ща допишу перемещение камеры с центром масс и заценю для трех
завтра продолжу...
большая просьба писавшим на этом....посоветовать что-нибудь
для начала я бы сделал все константы (в т.ч. и нулевые) флоатами - т.е. добавил бы .0 после каждой целочисленной константы
В случае пересечения 2х планет (проход через 0 на отрезке [-a, b] считать, что для всякого x работа при прохождении отрезка [-x, x] равна 0.
Конечно, будет погрешность за счёт поочерёдного перемещения. Тут уж не знаю, что делать.
Оставить комментарий
PooH
прога про три планеты, их гравитационное взаимодействиена производительность пох
пишется на блице3д
для незнающих:
planet(i)\a[k] - это поле а[k] списка planet(i)
Короче, вроде все правильно, только прога при g=50 не меняет картинку (ускорения = 0 а при g>60 все работает слишком быстро - т.е. планеты разлетаются за миллисекунды