Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Движение планет

Движение планет

Поделиться
Страницы: 1 2 313 14 Следующая »
VasiliskПостоялецwww27 сен. 20100:13#0
Добрый день вернее ночь...
Прошу помочь мне в с одним вопросом мне необходимо динамически создавать планеты с разными хар-ми (масса, скорость дввижения и т.д.) так-же и звезды. Необходима формула для расчета траектории полета этих самых планет по орбитам. Если более просто необходимо программно прописать формулу расчета координат с учетом силы тяготения и наверное центробежной силы, сами формулы по отдельности нашел, но как их в координаты превратить не понимаю, заранее благодарю.
allcreaterПостоялецwww27 сен. 20100:33#1
Насколько я понимаю, орбита определяется не только массой и радиусом, но и начальными параметрами, в которой эта система возникала, типа начальной скорости облака частиц. А в целом - почти всем рулит сила гравитации F = G*m1*m2/R^2. Лично я бы не пытался писать какую-то там функцию f(time, start_speed, ...), а просто рассчитывал бы всё это дело итеративно. Задаём начальную скорость планеты, задаём её массу и начальное положение - и в каждой итерации главного цикла притягиваем к центру по этой самой формуле. Разумеется, нужно ещё подобрать(или рассчитать, что предпочтительнее) минимальную скорость, необходимую для того чтобы планета не слетела с орбиты и не вписалась в звезду... =)
stopkinПостоялецwww27 сен. 20102:19#2
Vasilisk
В гугле забанили?
задача N тел
VasiliskПостоялецwww27 сен. 201015:08#3
Это понятно, вопрос в другом как с помощью вышеуказанной формулы расчитать координаты. На вектора моя помять не работает. А вообще параметры такие (Масса звезды, масса планеты, скорость, радиус от планеты до звезды.) причем это только начало. В дальнейшем на орбиту планеты будут влиять и другие планеты, а так же звезды соседних систем и эти звезды будут подчинятся тем же законам, затем будут добавлены параметры "Вязкости", то есть туманности астеройдные облака и т.д. мне самое главное вот это описать на одном примере. И очень важный момент это то что все буде в двух измерениях. А что центробежной силы разве нет в подобном движении? Если можно на примере М1=100кг М2=0.100 кг скорость 10 м/с расстояние 10 км. Как на этом примере расчитать дальнейшее движение точки в координатах (х,у). Смысл всего этого следующий, хочу увидеть жизнь звездных систем от создания до уничтожения. При начале работы программы задаются параметры изначальной массы вещества и количество энергии, затем генерируется взрыв этой "точки" с неким параметром мельчайшей частицы например (1 кг, 10000 е), а затем наблюдения формирования планет и звезд с дальнейшими преобразованиями, особенная точность и приближенность к реальности не нужна, нужна некая схемотичность.

Буду очень признателен за помощь в этом вопросе.

А гугл ничем не помог, так же как и яндекс и рамблер и вся их братва.

VasiliskПостоялецwww27 сен. 201015:11#4
Самое интересное что подбор скорости и массы задастся сам, в результате получется идеальная замкнутая система, кстати это будет РПГ=) причем фэнтези а не космическая8-)
stopkinПостоялецwww27 сен. 201016:14#5
Vasilisk
Для начала перейди в 8-ой класс.
VasiliskПостоялецwww27 сен. 201016:43#6
stopkin
Ты бы лучше не умничал, а дал дельный совет. Или ты тут для критики существуешь. Подобные вещи обычно пишут бабы. Я надеюсь, что ты не она.
stopkinПостоялецwww27 сен. 201016:46#7
Vasilisk
>а дал дельный совет.
тынц

P.S. То, что ты спрашиваешь, действительно учат в 8-ом классе.

ksacvet777Постоялецwww27 сен. 201017:09#8
Vasilisk
Да не обращай ты внимания на подобных мудаков.

Как-то давненько тоже задавался подобным вопросом

Есть (дано):
  - плоскость орбиты (или просто нормализованый вектор, нормаль )  (Vector3f).
  -  дата "создания" планеты.. по другому незнаю как описать, время от которого вести "существование" планеты (float).
  - направление на точку афелия (самая дальняя точка удаления) (Vector3f).
  - текущее время (float)

Найти:
  Позиция в текущий момент (Vector3f)

какова формула рассчёта позиции планетки по данному времени ?

Планеты обращаются по гиперболе. Чем ближе подходит тело к главному, тем выше его скорость.

  Не решил, но и сильного желания её решить небыло.

Очень занятная программулина по теме: http://www.shatters.net/celestia/

ПРАВКА, опечатался : не по гиперболе , по эллипсу.

СнаутУдалёнwww27 сен. 201018:16#9
/facepalm
ksacvet777
Vasilisk
В гуманитарной школе учились?
СнаутУдалёнwww27 сен. 201018:24#10
ksacvet777
> Да не обращай ты внимания на подобных мудаков.
ksacvet777
> Планеты обращаются по гиперболе.
Ты гиперболу когда-нибудь видел? Как по ней может что-то "вращаться"?
fzr125Постоялецwww27 сен. 201018:35#11
моделируй материальными точками.

В начале при инициализации задаешь что :
- скорость земли к примеру равна 20 по оси Z
- солнце находится в центре координат
- земля находится на расстоянии в 150-200
- все ускорения земли, и силы на нее действующие сбрасывашь в 0

В главном цикле
-Считаем радиус-расстояние - от земли до солнца
-Сила их стягивающая направлена по этому радиусу от земли к солнцу
-На солнце силы не влияют (фейк)
-Считаем силы действующие на землю по осям:

eFx=normalize(sx-ex) * G * (em * sm ) / (Radius*Radius)
eFy=normalize(sy-ey) * G * (em * sm ) / (Radius*Radius)
eFz=normalize(sz-ez) * G * (em * sm ) / (Radius*Radius)
sx - это позиция солнца по Х, ez - земли по Z. em - масса земли, sm - масса солнца
G - гравипостоянная

Далее просто высчитываешь новые координаты земли :

eAx=eFx/em    //ускорение = сила / массу
eAy=eFy/em
eAz=eFz/em

eVx=eVx+eAx*dt // скорость = скорость + ускорение * dt
eVy=eVy+eAy*dt
eVz=eVz+eAz*dt

ex=ex+eVx*dt // позиция = позиция + скорость * dt
ey=ey+eVy*dt
ez=ez+eVz*dt
И рисуем.

Параметры нужно будет выбрать ( не нужно указывать в парсеках, и в миллиметрах)

PS. Это псевдокод, знаю что он индусский - это я в Блиц3Д проверил работоспособность за пару минут ))
ЗЗЫ. Если нужно больше планет чем одна, добавляй еще одну материальную точку - и теперь считай что земля будет взаимодействовать с солнцом и с венерой, а венера - с землей и солнцем. Спутники также. Вращение можно подобрать изходя из скорости планеты, или выбрать постоянное.

Просто моделируем материальными точками и имеем профит. Можно даже бегло пробежаться по книге Когнера (Физика для разработчиков компьютерных игр) - она с картинками и там внятно разжевано про материальные точки, твердые тела и прочую ерунду.

По сути почти тоже что сказал allcreator

Успехов!

СнаутУдалёнwww27 сен. 201018:45#12
Пишу на случай, если кто-нибудь здравомыслящий когда-нибудь зайдёт в этот тред. Иначе он посчитает весь этот сайт логовом идиотов. Случай изотропного взаимодействия двух частиц сводится к задаче о движении одной частицы в центральном поле. Эта задача решена в общем случае, для сил гравитации её решение даёт траекторию в виде эллипса, окружности, параболы или гиперболы, что конкретно - зависит от момента импульса и энергии системы. Случай с большим числом тел не имеет аналитического решения в общем случае, (есть решение задачи Эйлера для трёх тел, масса одного много меньше двух других) поэтому такие задачи решают численно, на что и намекнул stopkin и продемонстрировал fzr125.
jokengleПостоялецwww27 сен. 201018:58#13
По идее, интегрирование, как предложил fzr125:
a = F/m
v = v + a * dt
r = r + v * dt
должно считать нормально, но если будут ошибки и орбиты будут ползти, есть смысл применить метод рунге-кутта 4-го порядка для повышения точности. (http://www.myphysicslab.com/runge_kutta.html - подпункт Multi-variable Runge-Kutta Algorithm, т.к. в твоем случае - шесть переменных (vx, vy, vz, x, y, z) и столько же диффуров первого порядка)
ksacvet777Постоялецwww27 сен. 201019:52#14
Пишу на случай, если кто-то дочитает до этой строки:
  На этом сайте живут не только  дети  ( пост 12 ), которые в последние два года отчаянно атакуют этот форум.

____

Топикстару нужна точность (не float, а по законам ) , а не имитация.

Страницы: 1 2 313 14 Следующая »

/ Форум / Программирование игр / Физика

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр