|
#1
|
|||
|
|||
Физика планет
Ворос про физику в Delphi. Есть множество планет, для каждой планеты нуна расчитать силу с которой на нее действуют другие планеты (планета имеет координаты, массу, начальную скорость и направление), потом вычислить результирующую силу, вычислить ускорение и новую скорость, найти новые координаты для этой плнеты.
Результирующую силу, ускорение я нашел, а как найти новую скорость и координаты ? Скорость вычисляется v=v0+at, а новая координата x=x0+v0t+at^2/2, но я не могу делать время каждый раз увеличивающимся. Нужно каждую секунду (т. е. t-const) считать новую скорость, а потом уже координату. |
#2
|
||||
|
||||
Копай в сторону систем реального времени
|
#3
|
|||
|
|||
Сначала запоминаем время старта:
C:= Now; Потом в любой момент времени время = (Now-C). Т.к. тип TDateTime считает в сутках, то надо преобразовать в секунды (или форматирование, или *24*60*60 2. Если точность не нужна, то вызывается TTimer (1000 ms) и делается инкремент какого-нибудь счётчика. |
#4
|
|||
|
|||
Посмотри как сделан популярный двиг Source ENGINE, и реализуй что-то подобное... я такую систему расчётов собираюсь использовать в своём игровом двиге Здесь главное с формулами разобраться, а остальное всё хип-хоп
|
#5
|
|||
|
|||
В свое время я тоже этим занимался... Тока векторным способом... Конечно он не такой уж точный, но работает (точнее работал, все исходники пропали с "полетом" винта)... Делал так...
Перещитывал для каждого тела (планеты или звезды - какая разница?) силы притяжения, т.е. F. Векторы разбивал (проектировал) по направлениям координат (сначала было 2D, потом 3D реализация), т.е. Fx, Fy, Fz. Т.е. фактически я работал в одномерном пространстве (на линейке). Потом складывал вектора притяжения с векторами скорости, т.е.: Vx = Vx + Fx Vy = Vy + Fy Vz = Vz + Fz И соответственно перемещал тела по координатам: X = X + Vx Y = Y + Vy Z = Z + Vz Проще некуда! =) Последний раз редактировалось Navi1982, 28.01.2008 в 16:51. |