Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Помогите найти аналитическое решение (3 стр)

Помогите найти аналитическое решение (3 стр)

Поделиться

Страницы: 1 2 3

HolyDelПостоялецwww11 сен. 201714:40#30
Suslik
> такая ракета будет лететь бесконечно.
она будет лететь ограниченное время. следовательно и расстояние, на которое она улетит - ограниченно. ты написал формулу максимальной скорости, которую может достичь такая ракета. мне-же, нужно посчитать дистанцию.
SalamandrПостоялецwww11 сен. 201714:47#31
S=V*t.
s -  путь
V - скорость
t - время
Это для линейного, если у тебя известна максимальная скорость, а у ракеты она точно будет максимальной после разгона.
А пока разгоняется, наверное есть смысл использовать первую формулу.

Правка: 11 сен. 2017 14:49

tacПостоялецwww11 сен. 201714:49#32
Salamandr
> S=V*t.
> Кажется я начинаю вникать.
стебемся :) моя дочь пошла в 7 класс и учит эти формулы :)
tacПостоялецwww11 сен. 201714:50#33
HolyDel
> я могу найти эту дистанцию так
и что тебя не устраивает? хочется себе мозг нагрузить? не решается простой арифметикой

Правка: 11 сен. 2017 14:50

SalamandrПостоялецwww11 сен. 201714:50#34
tac
А для меня это сейчас тёмный лес. Я видимо не только логарифмы, но и физику неплохо так пропустил.
У меня так устроен мозг, что я перестал запоминать решения. Вместо этого я запоминаю где нашёл, или какими словами нашёл в гугл. Или смотрю свой старый код. Но в данном случае, его просто нет по этой теме.

Правка: 11 сен. 2017 14:52

FordPerfectПостоялецwww11 сен. 201715:27#35
HolyDel
Должно работать:
speed[n]=(speed[n-1]+acc)*speedDemp
speed[n]=speed[n-1]*speedDemp+acc*speedDemp
speed[n]=(speed[n-2]*speedDemp+acc*speedDemp)*speedDemp+acc*speedDemp
...
speed[n]=speed[0]*speedDemp^n+n*acc*speedDemp

dist[n]=speed[0]+...+speed[n-1]=sum(speed[0]*speedDemp^k,0,n-1)+sum(k*acc*speedDemp,0,n-1)
Слева - сумма геометрической прогрессии, справа - сумма арифметической прогрессии.
dist[n]=speed[0]*(1-speedDemp^n)/(1-speedDemp)+acc*speedDemp*n*(n+1)/2

FordPerfectПостоялецwww11 сен. 201715:39#36
А, гоню.

speed[n]=speed[0]*speedDemp^n+acc*(speedDemp+...+speedDemp^n)
speed[n]=speed[0]*speedDemp^n+acc*(1-speedDemp^(n+1))/(1-speedDemp)

speed[n]=speed[0]*speedDemp^n+acc/(1-speedDemp)-(acc/(1-speedDemp))*speedDemp^(n+1)

dist[n]=(speed[0]-(acc*speedDemp/(1-speedDemp)))*(1-speedDemp^n)/(1-speedDemp)+(acc/(1-speedDemp))*n

http://rextester.com/DBWKCO56601

SuslikМодераторwww11 сен. 201716:09#37
HolyDel
> она будет лететь ограниченное время
ну берёшь да считаешь.
ускорение:
[cht]\ddot x = -\alpha \dot x + \frac{F}{m}[/cht]
чтобы решить, делаем замену [cht]\dot x^*=\dot x-\frac{F}{m\alpha}[/cht], получаем:
[cht]\ddot x = \ddot x^*=-\alpha(\dot x} + \frac{F}{m\alpha})=-\alpha \dot x^*[/cht]
это мы уже решали, получалось
[cht]\dot x^*(t)=\dot x^*(0)e^{-\alpha t}[/cht]
подставляем, чтоб найти [cht]\dot x(t)[/cht]:
[cht]\dot x(t) = (\dot x(0) - \frac{F}{m\alpha})e^{-\alpha t} + \frac{F}{m \alpha}[/cht]
sanity check: при t = 0 получается [cht]\dot x(0)[/cht], при [cht]t \rightarrow +\infty[/cht] получается [cht]\frac{F}{m \alpha}[/cht], при устремлении [cht]\alpha \rightarrow 0[/cht] получаем:
[cht]\dot x(t) = (\dot x(0) - \frac{F}{m\alpha})(1-\alpha t) + \frac{F}{m \alpha}=\dot x(0) - \frac{F}{m\alpha} + \alpha t \dot {x}(0) + \frac{Ft}{m}+\frac{F}{m \alpha}=\dot x(0) + \frac{Ft}{m}[/cht] — о, чудо, равноускоренное движение, то есть всё правильно.
дальше это надо проинтегрировать:
[cht]x(t)=-(\dot x(0)-\frac{F}{m \alpha})\frac{e^{-\alpha t}}{\alpha}+\frac{Ft}{m \alpha}+C[/cht]
ищем [cht]C[/cht] из условия, что [cht]x(0)=x(0)[/cht]:
[cht]x(0)=-(\dot x(0)-\frac{F}{m \alpha})\frac{1}{\alpha}+C[/cht], то есть [cht]C = x(0)+(\dot x(0)-\frac{F}{m \alpha})\frac{1}{\alpha}[/cht]
подставляем, получаем результат:
[cht]x(t)=x(0)-(\dot x(0)-\frac{F}{m \alpha})\frac{e^{-\alpha t}-1}{\alpha}+\frac{Ft}{m \alpha}[/cht]это итоговая формула

опять же, никогда не забываем sanity check, чтоб убедиться, что примерно правильно: при F=0 формула переходит в формулу без силы, при [cht]\alpha \rightarrow 0[/cht] при разложении в ряд получается (экспоненту нужно разложить аж до двух степеней, уберите школьников от экранов):
[cht]x(t)=x(0)-(\dot x(0)-\frac{F}{m \alpha}})\frac{1 - \alpha t + \alpha ^2 t^2 / 2 - 1}{\alpha}+\frac{Ft}{m \alpha}=x(0)+(\dot x(0)-\frac{F}{m \alpha}})(t - \alpha t^2 / 2 )+\frac{Ft}{m \alpha}=[/cht]
[cht]=x(0)+\dot{x}(0)t+\frac{Ft^2}{2m}[/cht] — снова чудо, так как снова равноускоренное движение

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

Правка: 11 сен. 2017 16:19

tacПостоялецwww11 сен. 201717:08#38
Suslik
мм ... что то меня точечка над x смущает, что это? можно пояснить не травмируя мозг :) производная, не?

Правка: 11 сен. 2017 17:10

MrShoorУчастникwww11 сен. 201720:16#39
HolyDel
> сама пргорессия загуглилась, и это оно, однако сумма ее не гуглится. ее точно
> можно посчитать без итераций?
Да, не гуглится... грусть. Ну наверное тогда проще уравнение движение как делает этот суслик.

Андрей5000
> Почему именно экспонента?
То, что там экспонента - интуитивно можно догадаться, а можно расписать уравнение движения для силы:

m*a = -k*v //просто сила трения, которая линейно заивист от скорости
m*(dv/dt) = -k*v
dv/v = (-k*m)*dt
ln(|v|) + С = -k*m*t
и вот если выразить отсюда скорость, то и приходит экспонента:
|v| = e^(-k*m*t-C)

Sh.Tac.Постоялецwww11 сен. 201720:19#40
а по-моему надо в рамочку и куда-нибудь на видное место повесить, в статьи или подсказки
пожалуйте, готовый баллистический вычислитель, теперь можно и свой TCP ваять : )
SuslikМодераторwww12 сен. 20172:52#41
tac
> мм ... что то меня точечка над x смущает, что это? можно пояснить не травмируя
> мозг :) производная, не?
ну писал ведь уже зефику:
Изображение

Страницы: 1 2 3

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

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