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

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

Поделиться

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

FordPerfectПостоялецwww10 сен. 201720:48#15
HolyDel
Т. е. тебе нужно именно вычислить значение в результате цикла, в отрыве от физической модели?
Без самого цикла?
FordPerfectПостоялецwww10 сен. 201720:55#16
HolyDel
>что загуглить если у меня прогрессия смешанная, типа такой:
Разностные уравнения.

Конкретно в твоём случае:
speed[n]=speed[0]*pow(speedDemp,n) + n*acc*speedDemp
Обе части просуммировать.

MrShoorУчастникwww10 сен. 201721:08#17
HolyDel
> что загуглить если у меня прогрессия смешанная, типа такой:
Сумма N членов арифметико-геометрической прогрессии.
Хорошо что суслик пока что спит, и не видит моих ответов. xD

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

SuslikМодераторwww11 сен. 20173:02#18
Андрей5000
продифференцировал, [cht]\dot{x}(t+dt)=(1-\alpha \cdot dt)\dot{x}(t)[/cht] исходное  никак не получается. Производная от экспоненты это же и есть экспонента. А в исходном уравнении никаких экспонент нет.

дифференцируем
[cht]\dot{x}(t)=e^{-\alpha (t-t_0)}\dot{x}(t_0)[/cht]
получаем:
[cht]\ddot{x}(t)=-\alpha (e^{-\alpha (t-t_0)}\dot{x}(t_0))[/cht],
подставляем предыдущее сюда:
[cht]\ddot{x}(t)=-\alpha \dot x[/cht],
то есть интегрирование было выполнено правильно.

чтобы получить [cht]\dot{x}(t+dt)=(1-\alpha \cdot dt)\dot{x}(t)[/cht], нужно разложить экспоненту в ряд до первого члена:
[cht]e^{-\alpha (t-t_0)} \approx 1 - \alpha(t-t_0)[/cht],
далее, если [cht]dt=t-t_0[/cht], то как раз получаем наше любимое [cht]\dot{x}(t+dt)=(1-\alpha \cdot dt)\dot{x}(t)[/cht]. обращаю внимание, последняя формула корректна только при маленьких значениях [cht]\alpha,dt[/cht], а формула с экспонентной справедлива при любых значениях. например, можно рассчитать движение тела с dt=10(секунд) за одну итерацию, если от сервера пришёл большой dt.

MrShoor
> Как же тебя бобмануло, что даже тему переоткрыл. Ненуачо, я модератор, что хочу, то и делаю.
именно так. я бы вообще не давал пользователям возможности решать за других, хотят они отписаться в их треде или нет. тред — это не частная собственность его автора, чтобы он распоряжался им, как хотел.

MrShoor
> Ну вон суслик говорит, что будут.
дело не столько в погрешностях, сколько в самом подходе, в котором формулы выписываются сразу в дискретном приближении, скрывая физику процесса. из-за этого такая элеметнарная задача как смена шага интегрирования становится вовсе не тривиальной. аналогично у автора в нульпосте то, что называется "скоростью" — это не скорость вовсе даже из соображений размерности, а смещение. опять же, хоть результат у того кода и нормального будет идентичным при одинаковом шаге времени, но экстраполировать его на неконстантный шаг, а тем более делать более сложные физические вычисления уже будет невозможно.

вообще меня жутко бомбит, когда в формулах в простой игровой физике не соблюдают размерность. "ачё, предположим, что dt=1, да и всё". а потом создают треды с нытьём, что у них физика от fps зависит.

Правка: 11 сен. 2017 3:05

SalamandrПостоялецwww11 сен. 20179:39#19
Suslik
А можно ещё разжевать ещё подробнее?
Пример как у HolyDel, только без гашения скорости.
Желательно на конкретных примерах, как можно применить формулу. Как ты разложил первоначальную и т.д.
Просто я реально пропустил логарифмы и матрицы (матрицы немного зацепил, но толком не помню.)
Пропустил, потому что болел. Школу закончил ещё в 1998, очень редко считаю в ручную, пологаюсь на готовые движки, а тут понадобилось для сервера.
Хочу заранее посчитать путь, где будет объект в конкретный момент времени. У меня грузовики с постоянной скоростью, стоянки на светофорах я сам приплюсую, если буду знать в какое время он будет его проезжать (и какой там будет свет) .

Правка: 11 сен. 2017 9:44

9К720Участникwww11 сен. 201710:00#20
Salamandr
> Пропустил, потому что болел. Школу закончил ещё в 1998, очень редко считаю в
> ручную, пологаюсь на готовые движки, а тут понадобилось для сервера
Надо сохранить ссылку на этот пост. Чтобы давать ее всяким "универ бесполезен, всю нужную математику можно быстрее самому выучить по книгам и интернету"
SalamandrПостоялецwww11 сен. 201710:10#21
9К720
Дык, и про бизнес так пишут.
"Чему учит школа?" - школа учит как работать, но не учит как зарабатывать. (Роберт Киосаке)
Школа также не учит жизни, не учит тому как содержать семью. Как ухаживать за твоим новорождённым. Как иметь здоровые отношения в семья. Как стать программистом. Всему этому школа не учит, а если у Вас возникает вопрос, а чему же она тогда учит? Учите матчасть, у неё свои задачи.

Я понял что комплимент, спасибо на добром слове. Кстати за 36 лет, у меня лишь 11кл за плечами.
Просто не нашёл университет где было бы только программирование, а в остальных науках я не особо силен.

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

HolyDelПостоялецwww11 сен. 201710:21#22
MrShoor
> Сумма N членов арифметико-геометрической прогрессии
сама пргорессия загуглилась, и это оно, однако сумма ее не гуглится. ее точно можно посчитать без итераций?

FordPerfect
> speed[n]=speed[0]*pow(speedDemp,n) + n*acc*speedDemp
> Обе части просуммировать.
либо я что-то неправильно делаю, либо это не работает. в любом случае, даже найдя значения скорости в начале и в конце, я не смогу просто посчитать сумму арифметической прогрессии, ведь "скорость" будет расти нелинейно.

Suslik
похоже я тоже описываю xy problem. опишу конечную задачу, чтобы не идти неверным путем и вас не путать.

в игре есть двухмерный физический мир (Box2DX - шарповский вариант). игра обрабатывает мир строго с фиксированной дельтой. это мне нужно и в других местах, такчто фиксированная дельта будет всегда. если игра не справится за тик с рассчетами, значит такова судьба.
в игре есть стрельба снарядами,у которых есть время жизни и масса. снаряды бывают двух типов:
1) просто снаряды: создаются в одном месте. после создания им задается импульс
2) ракеты: создаются в одном месте. после создания им задается импульс, в течении жизни к их телу применяется движущая сила
скорость снарядов гасится значением LinearDamping

я хочу отрисовать в туллтипе дистанцию, на которые снаряды долетят за время их жизни.
и если для первых прекрасно подходят что численное решение MrShoor-а, что твое аналитическое, то для вторых я пока решения не нашел.

вот такого типа тултип:

+ Показать

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

Андрей5000Постоялецwww11 сен. 201710:36#23
Suslik
если идти с обратного конца, то действительно всё получается.
Но если идти прямо, то как ты догадался заменить
Изображение
на экспоненту? У тебя всегда ряды маклорена в голове?) Почему именно экспонента? Ведь по одному члену ряда трудно судить что это за функция.

Ещё я так понял что твоё решение получается корректней чем использование вещественного n в формуле суммы прогрессии именно за счёт использования числа эйлера в экспоненте.
Получается действительно аналитическое решение для любых dt.

Salamandr
если скорость у тебя не гасится то в чём проблема? линейное движение

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

ZefickПостоялецwww11 сен. 201711:40#24
Андрей5000
> К чему тут эти интегралы суслика?
  При том, что перемещение это интеграл от скорости. Скорость в данном случае выражается так: V = 0.99(t-t0). Соответственно от этого интеграл и надо брать.

9К720
> Надо сохранить ссылку на этот пост. Чтобы давать ее всяким "универ бесполезен,
> всю нужную математику можно быстрее самому выучить по книгам и интернету"
  Ну в данном случае формула суслика это какой-то академический бред, написанный с целью показать, какой он типа умный. Тут школьных знаний более чем достаточно и не нужны никакие иксы с двумя точками и dt.

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

SuslikМодераторwww11 сен. 201712:29#25
Андрей5000
> как ты догадался
паринь, я последние 15 лет пишу физические движки. уже не вспомню, как догадывался до таких вещей впервые. но вообще если где-то есть мультипликативный процесс, который поисходит каждую итерацию, то он наверняка имеет какое-то отношение к эспоненте. ещё если в каком-то процессе скорость замедления процесса зависит от скорости процесса, то это — явно экспонента. примеры: затухающие колебания, разрядка конденсатора, вязкие течения.

HolyDel
> в игре есть двухмерный физический мир (Box2DX - шарповский вариант). игра
> обрабатывает мир строго с фиксированной дельтой. это мне нужно и в других
> местах, такчто фиксированная дельта будет всегда
ещё раз повторю. речь не столько в том, понадобится тебе нефиксированный шаг или нет. вопрос здесь в том, корректный ли физический смысл ты вкладываешь в формулы. если в формуле не сходится размерность, формула в принципе не может быть правильной. к метрам нельзя прибавить метры в секунду, не помножив их на секунду. в случае x+=v*dt, подобные ошибки тривиальны и обычно легко исправляются. но в случае с большим матаном (те же самые внутренности box2d, PBR рендер или любая другая нетривиальная физика), такие ошибки совершенно недопустимы, потому что тянут за собой ворох проблем. это примерно как нормальное именование переменных: в принципе, программа будет работать и с переменными a0, a1, a2, ..., a42, но такой код сложно читать, отлаживать и расширять. то же самое с размерностями.

Zefick
> Тут школьных знаний более чем достаточно и не нужны никакие иксы с двумя точками и dt.
давно это в школе производные с дифференциалами не проходят?

Правка: 11 сен. 2017 13:15

ZefickПостоялецwww11 сен. 201712:48#26
Suslik
> давно это в школе производные с дифференциалами не проходят?
  Я говорю про совершенно лишние академические обозначения, которые не то что человек с 11 классами не поймёт, но даже человек с ВО предпочтёт не видеть там, где они совешненно не нужны.
SuslikМодераторwww11 сен. 201713:08#27
Zefick
>   Я говорю про совершенно лишние академические обозначения, которые не то что
> человек с 11 классами не поймёт, но даже человек с ВО предпочтёт не видеть там,
> где они совешненно не нужны.
я уж не знаю, по какому критерию ты определяешь лишнесть математических обозначений, но как бы [cht]\ddot x = \frac{d^2x}{dt^2}=x''_{tt}[/cht] — это стандартная запись одного и того же из школьной программы, я выбрал наиболее короткую. впрочем, я прекрасно знаю, к чему сводятся споры на границе твоего неосиляторства с троллингом, так что оставайся при своём мнении, тред к тебе всё равно никак не относится.

HolyDel
> 2) ракеты: создаются в одном месте. после создания им задается импульс, в
> течении жизни к их телу применяется движущая сила
> скорость снарядов гасится значением LinearDamping
такая ракета будет лететь бесконечно. её скорость будет по асимптоте стремиться к величине [cht]v(\infty) \equiv \dot x(\infty)=\frac{F}{\alpha m}[/cht], где F — сила, с которой толкает ракету, m — её масса, [cht]\alpha[/cht] — коэф. вязкости в формуле [cht]\ddot x = -\alpha \dot x[/cht]

Правка: 11 сен. 2017 13:21

HolyDelПостоялецwww11 сен. 201713:18#28
Suslik
> ещё раз повторю. речь не столько в том, понадобится тебе нефиксированный шаг
> или нет. вопрос здесь в том, корректный ли физический смысл ты вкладываешь в
> формулы. если в формуле не сходится размерность, формула в принципе не может
> быть правильной. к метрам нельзя прибавить метры в секунду, не помножив их на
> секунду. в случае x+=v*dt, подобные ошибки тривиальны и обычно легко
> исправляются. но в случае с большим матаном (те же самые внутренности box2d,
> PBR рендер или любая другая нетривиальная физика), такие ошибки совершенно
> недопустимы, потому что тянут за собой ворох проблем. это примерно как
> нормальное именование переменных: в принципе, программа будет работать и с
> переменными a0, a1, a2, ..., a42, но такой код сложно читать, отлаживать и
> расширять. то же самое с размерностями.
это я уже понял. прямо сейчас переделываю с тиков на секунды

Suslik
подскажи как посчитать дистанцию если есть не только damping но еще и какая-то сила прикладывается к телу проделывающему путь.

SuslikМодераторwww11 сен. 201713:24#29
HolyDel
> подскажи как посчитать дистанцию если есть не только damping но еще и какая-то сила прикладывается к телу проделывающему путь.
см.предыдущий пост

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

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

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