Комментарии 30
В первую очередь спасибо автору и переводчику, статья действительно интересная.
Вопрос не знаю кому из вышеперечисленных: хорошо, вычислили силы действующие на треугольники (пусть даже только вертикальные), как дальше применить их к действию на корпус судна как целого объекта, нужен центр масс или какой-то другой принцип? тем более силы вращения там не избежать, если волны есть, в вертикальной плоскости например.
Вопрос не знаю кому из вышеперечисленных: хорошо, вычислили силы действующие на треугольники (пусть даже только вертикальные), как дальше применить их к действию на корпус судна как целого объекта, нужен центр масс или какой-то другой принцип? тем более силы вращения там не избежать, если волны есть, в вертикальной плоскости например.
0
Думаю, это выходит за рамки статьи. Так как применение сил уже задача физического движка. В большинстве физических движков есть просто набор функций, которые позволяют применять силы к центру масс объекта или произвольной его точке. Внутри каждого объекта при этом обычно есть пара аккумуляторов, которые накапливают суммируемые силы и моменты сил относительно центра масс. То есть, с точки зрения клиентского кода надо пробежать по всем треугольникам и вызвать что-то типа «объект.добавить_силу(вектор_силы, точка_приложения)». Затем уже на этапе расчёта физического мира по накопленным в аккумуляторах силам рассчитываются ускорения (линейные и угловые соответственно), по ним скорости (аналогично, линейные и угловые), а по скоростям — перемещения.
+1
Расчет точки приложения силы — это бесполезная трата вычислительных ресурсов, причем в некоторых сложных случаях ее, вообще, может не существовать. Правильным будет считать и применять отдельно силу и момент силы. Момент считается проще точки приложения, да и движку нужен только он.
0
Ваши черепахи побежали туда и сюда, я за ними не успеваю.
Вы относительно чего собрались считать момент сил если это и есть векторное произведение радиус-вектора от оси вращения до точки приложения силы и никак иначе? И что за такие сложные сложные случаи?
Ну и да, по теореме Эйлера любое движение есть суперпозиция поступательного и вращательного движения, ну можно раскладывать любое движение как угодно и не всегда однозначно. Ну да, есть теорема Вариньона — определяем момент сил относительно произвольной оси по действующим силам. Вы это хотели сказать?
Вы относительно чего собрались считать момент сил если это и есть векторное произведение радиус-вектора от оси вращения до точки приложения силы и никак иначе? И что за такие сложные сложные случаи?
Ну и да, по теореме Эйлера любое движение есть суперпозиция поступательного и вращательного движения, ну можно раскладывать любое движение как угодно и не всегда однозначно. Ну да, есть теорема Вариньона — определяем момент сил относительно произвольной оси по действующим силам. Вы это хотели сказать?
0
Переход между моментами сил относительно разных точек тривиален, поэтому считаем его относительно любой удобной точки — обычно это центр масс всего тела. Сложные случаи — это когда полная сила равна нулю и есть только момент.
Собственно, в приложении А прекрасная иллюстрация всего этого: сначала находится момент сил, а потом решается уравнение, чтобы приравнять этот момент к нулю. Причем решение содержит деление, что может приводить к проблемам при нуле в знаменателе. Стоило бы остановиться после вычисления момента.
Собственно, в приложении А прекрасная иллюстрация всего этого: сначала находится момент сил, а потом решается уравнение, чтобы приравнять этот момент к нулю. Причем решение содержит деление, что может приводить к проблемам при нуле в знаменателе. Стоило бы остановиться после вычисления момента.
0
Вижу, появилось много вопросов, добавил постскриптум к статье.
0
Спасибо, жду продолжение перевода.
Еще один вопрос на который автор ответил, но как мне кажется не стал решать:
автор пишет про упрощение расчета сил на треугольник: «Это в особенности актуально при использовании низкополигональной сетки объекта для уменьшения ущерба производительности, потому что ошибка, сделанная для каждого треугольника, довольно значима.» И сам же автор использует в модели судна длинные треугольники (особенно видно на бортах модели) длина которых в четыре-пять раз длиннее сетки на воде. Соответственно если делить такой треугольник по методу автора получим точно нестабильность модели даже на относительно спокойной воде. А в при сильной волне проще вообще вращать судно плюс-минус волне и возможно будет похоже )
Еще один вопрос на который автор ответил, но как мне кажется не стал решать:
автор пишет про упрощение расчета сил на треугольник: «Это в особенности актуально при использовании низкополигональной сетки объекта для уменьшения ущерба производительности, потому что ошибка, сделанная для каждого треугольника, довольно значима.» И сам же автор использует в модели судна длинные треугольники (особенно видно на бортах модели) длина которых в четыре-пять раз длиннее сетки на воде. Соответственно если делить такой треугольник по методу автора получим точно нестабильность модели даже на относительно спокойной воде. А в при сильной волне проще вообще вращать судно плюс-минус волне и возможно будет похоже )
0
Тот же метод, что и в статье, приоритет думаю здесь, но реализованный в софте UNITY3D и С#, с исходниками и комментариями к ним
думаю интересно сравнить
http://www.habrador.com/tutorials/unity-boat-tutorial/
думаю интересно сравнить
http://www.habrador.com/tutorials/unity-boat-tutorial/
0
К каждому треугольнику сила и прикладывается, а дальше уже дело физического движка сдвинуть/повернуть/наклонить корпус как надо в зависимости от всех приложенных сил. В этом и есть сила подхода, хотя и вычислительно затратно.
0
Круто, читать было интересно. К сожалению, используется очень большое упрощение, которое начинается в самой первой формуле — вместо давления воды сразу используется глубина.
(*) Если бы давление в точке заданной глубины было по каким-то причинам ниже относительно точек на той же глубине, то вода в точках на той же глубине, подвергающаяся большему давлению, очень быстро переместилась бы в точку с меньшим давлением и восстановила равномерное давление на этой глубине.
Это в стационарном случае. Если на море есть волны (которые перемещаются не так уж и быстро), то распределение давлений сложнее. Интуиция мне подсказывает, что давление по горизонтали будет меняться периодически — типа синусоиды с периодом в размер волны на поверхности и с затуханием колебаний в глубине, но я точно не знаю.
В конце считается только вертикальная сила — мне кажется это неправильным. На больших волнах должна возникать и горизонтальная сила. Например, её используют серферы, когда скользят вниз с гребня волны.
+3
Думаю, давление не стоит рассматривать отдельно от глубины в случае гидростатики. Волны, как вы заметили, движутся относительно медленно, а вот скачки давления рассасываются со скоростью звука, который в воде в несколько раз выше, чем в воздухе. Так что волны должны правильно учитываться, если использовать достаточно мелкую сетку для представления поверхности воды.
Да и горизонтальную составляющую вам никто не мешает учитывать, там же везде в формулах нормаль к поверхности треугольника, которая не обязательно вертикальна. Просто в случае, если волн нет, горизонтальная составляющая обнулиться.
Да и горизонтальную составляющую вам никто не мешает учитывать, там же везде в формулах нормаль к поверхности треугольника, которая не обязательно вертикальна. Просто в случае, если волн нет, горизонтальная составляющая обнулиться.
0
Скачки быстро рассасываются, это да, вот только в формулу для равновесного давления входит ускорение точек жидкости. Если в случае статики там просто g, то в случае динамики добавится вклад от движения волн.
В общем, моя основная претензия в том, что сначала автор говорит, что будет рассматривать только статику, а потом пол статьи рассказывает, как он учитывал неплоскую поверхность воды. Причем видно, что делает это автор не понимая физику процесса, а формально применяя упрощенные формулы вне их области применения.
В общем, моя основная претензия в том, что сначала автор говорит, что будет рассматривать только статику, а потом пол статьи рассказывает, как он учитывал неплоскую поверхность воды. Причем видно, что делает это автор не понимая физику процесса, а формально применяя упрощенные формулы вне их области применения.
+3
Абсолютно согласен с вами. Но думаю, для игры этого более чем достаточно. Если всю гидродинамику считать точно — это уже будет совсем не реальное время. И в 1 мс на корабль вы вряд ли уложитесь. Кстати, гидродинамика обещана в следующей статье.
0
Кстати, а сколько там этого вклада от движения волн по сравнению со статикий? Полагаю, расхождение будет от силы в несколько процентов. Что визуально в игре никто даже и не заметит. Даже статики достаточно, чтобы корабль на волнах на глаз покачивался правильно. А большего и не надо. Это же не инженерные расчёты. Тут как раз и надо искать баланс скорости и корректности.
0
Основное расхождение будет из-за того, что автор полностью пренебрегает боковой составляющей силы. Из-за этого, например, корабль не будет соскальзывать по наклонному боку волны. Т. е. считать давление через высоту поверхности воды над точкой — это нормально (хотя я б еще размывал карту высот с глубиной), но вот считать только вертикальную составляющую — это совсем некорректно.
0
Ещё интересно, как смоделировать волнение воды от взаимодействия с объектом.
+1
Напомнило:
+4
Очень не хватает морских симуляторов. Самому спроектировать корабль и его же и затопить (по всем правилам физики) — вот это круто.
+3
В одном НИИ в Петербурге работал над созданием условно-«HPC» кластера для расчета поведения твердых тел в жидкости в StarCCM
-1
И конечно же напишешь об полученом опыте на хабре? Или в РФ-IT считается «работал» это типа стаж просиживания штанов, а не опыт?
-4
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Модель взаимодействия судов с водой в видеоиграх