Pull to refresh

Comments 18

Почему-то не учтены сопротивление воздуха и ветер...

Ага. Причем при реальной стрельбе это чуть ли не основные факторы. И более того, не так и сложно учитываемые (мы же не будем реально рассчитывать Cx, скажем так, мы просто учтем, что сила сопротивления пропорциональна квадрату скорости). Но вот аналитически наверное задача уже не решится нифига.
Мне буквально с первой строчки и до последней строчки статьи хотелось кричать — «Решайте дифференциальные уравнения численными методами!!!» именно для этого у Вас и есть компьютер, а Вы на мой взгляд как бухгалтер, сидящий за компом в 1Ске и вооружившийся счётами, чтобы все проверить. Аналитические методы они ведь были придуманы и актуальны именно когда альтернативы и не было. А первая Ваша формула это ни что иное как аналитическое решение диф. уравнения о том что ускорение является второй производной пути по времени.
Первое правило математика — ничто решаемое аналитически не должно решаться численно. Аналитическое решение всегда точное и вычисляется за просто безумное меньшее время.

Понятное дело, везде есть свои ограничения. Но тут даже близко не тот уровень сложности аналитического решения, чтобы переходить к численным методам. Это же игры, тут могут быть сотни таких снарядов. Мобилки, например, столько одновременно решаемых численно уравнений могут и не потянуть.
В том то и дело что автор уже в конце статьи столкнулся со сложностями поиска аналитического решения.
Аналитическое решение всегда точное и вычисляется за просто безумное меньшее время.
С первой половиной утверждения согласен, а вот со второй нет. Зачастую аналитическое решение сопоставимо по времени, а иногда вообще дольше.
Это же игры, тут могут быть сотни таких снарядов.
Даже при сотнях снарядов на экране это будет редко больше одного такого расчета на один фрейм, он ведь только в момент выстрела нужен. Отрисовка каждого из снарядов (которых сотни) будет занимать больше ресурсов, каждый фрейм. Экономия на спичках. При этом оптимизация под мобилки, сотни снарядов, правдоподобная баллистика, и точное аналитическое решение как-то не вяжутся между собой, один из пунктов тут явно лишний (а может даже два).
Зачастую аналитическое решение сопоставимо по времени, а иногда вообще дольше.


Можно пример? Думаю, стоит подчеркнуть несколько вещей
1) Не учитываем итеративные аналитические формулы для которых есть приближенные формулы, работающие за единичное время (формула Бине например)
2) Учитывается только время работы программы, а не трудозатраты на создание алгоритма.
3) Мы берем некие общие случаи, то есть алгоритм должен быть в среднем быстрее на численных методах, чем на аналитических на всех реалистичных доступных входах.

А вообще это схоже со спорами об оптимальности тех или иных алгоритмов. n*Log_n вроде и лучше, чем n^2, но исключения в реальной практике найти можно легко.
Можно пример?
Например, тема статьи. Несколько итераций прицеливания с корректировкой по уточняемому времени будут сопоставимы по производительности с аналитическим решением, и иметь достаточную точность для большинства игр. При этом даже аналитический метод не учитывает ускорение мишени (которое на сложном рельефе будет постоянно) и будет периодически мазать на движении казалось бы по прямой.
Не учитываем итеративные аналитические формулы для которых есть приближенные формулы
А почему не учитываем то? Пропорциональность точности и количества расчетов это основной аргумент в пользу моего утверждения. Торг между этими двумя критериями и сложностью реализации это основная причина существования численных методов в принципе.
Вынужден признать, Вы меня убедили…
Хорошо, что согласны. Тогда, чисто для развлечения, пример совсем из
другой области. Я занимаюсь вычислительной физикой. Когда (очень давно)
я юношей начал работать, то решал задачи распространения длинных
волн в анизотропной ионосфере Земли. Такая среда имеет 4 собственных
волны, параметры которых описываются как раз уравнением 4-й степени
с комплексными коэффициентами. Такое уравнение, как известно, можно
решить аналитически — через вспомогательное уравнение 3-й степени,
куча степеней и радикалов. И как привлекательно. Но в эти формулы
нужно подставлять числа и считать. А засада в том, что у этих корней
мнимая и вещественная части очень сильно отличаются. Порядков на 6.
И у них есть знаки. Вот представьте: вещественная часть 100 (это
показатель преломления фактически), а мнимая (-10^-4) — это
коэффициент затухания. Когда вы пройдете цепочку возведений в
степень, сложений-вычитаний и корней (квадратных и кубических),
то на конечной разрядной сетке вы вполне можете потерять, скажем,
этот знак минус. Я был юношей эрудированным и был в курсе, что
есть способы организации таких вычислений с минимальной потерей
точности. Ну, поэкспериментировал. Получалось громоздко, некрасиво
и не универсально. И куда-то делась прелесть аналитики? Вот я и
рассудил, что, чем дурью маяться, нужно изначально решать уравнение
численно, но так, чтобы проблемы не было. Корни — это такие «воронки»
на поверхности полинома в комплексной плоскости. В эти воронки можно
бросить треугольник (это симплекс, по сути) — и пусть он в эту воронку
«падает». Это только операция масштабирования. Процедура работала
очень быстро, а, главное, стабильно. Мне ни разу не удалось ее
подловить на сбоях в моих задачах. Извините за «много слов».
Для попадания по движущейся мишени — я сперва решал «по неподвжиной мишени», потом вычислял время полёта снаряда, потом вычислял новые координаты мишени (куда она сместится за это время), и еще раз решал по «по неподвжиной мишени» с новыми координатами.

Там получался небольшой разброс, но вполне удовлетворительный.

Можно решать несколько раз, пока не получится хорошая точность.


P.S. Кстати, при стрельбе по движущейся мишени можно перейти в систему отсчёта, в которой мишень неподвижна. Начальная скорость будет не V в любую сторону, а сдвинутая на минус скорость мишени.

А что, если и сам стреляющий двигается, и снаряд помимо вектора скорости, который мы ищем, имеет еще один

В простейшем случае просто отнимаем от скорости мишени скорость стрелка. Если скорости равны, то сводится к стрельбе по неподвижной мишени.
Синтаксис LaTeX ужасен, его сложно учить


Будучи человеком который 18 лет назад подсадил на LaTeX половину своих одногрупников с вами не соглашусь. Специальность не IT'шная.
Синтаксис LaTeX самый худший, за исключением всех остальных способов ввода формул.

У. Черчиль

Простите, а что в расчёте параболы неочевидного? Это ж школьная физика.
Я-то надеялся, что будем учитывать сопротивление воздуха и интегрировать...

Я-то надеялся, что будем учитывать сопротивление воздуха и интегрировать...

А ещё компенсировать лаг, ага.

Sign up to leave a comment.

Articles

Change theme settings