| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > простая , но не совсем физика в 3Д |
| Автор: Dubinsky 17.1.2006, 12:14 |
| Уважаемые знатоки , писал когда-то маленькие игрухи в 3Д окружении но с 2Д физикой (камера в одной плоскости и все действия происходили тоже только в строго одной плоскости , однако модельки были 3Д ну и всё такое) так вот в таком случае с физикой было просто : есть точка положения объекта , вектор скорости , и единственный угол поворота + момент + момент инерции.Но вот стоило мне перейти в 3Д мир , как всё просто стало вконец непонятным ... есть тело в космосе , у него есть положение (x,y,z) и есть некий вектор его скорости (x,y,z) тут всё ясно как вычислить новое положение тела в пространстве , но как быть с поворотом тела ? есть моменты по осям (Pitch , Yaw , Roll) а как теперь вычислить результирующее положение тела ? и как это самое положение (поворот) лучше всего представить ? вообще не пойму даже с чего начать ... |
| Автор: DENNN 17.1.2006, 15:56 |
| Положение объекты удобней всего описывать матрицей преобразование. Матрица афинных преобразований способна учитывать параллельный перенос, поворот и масштабирование (+ неортогональность осей координат, но к задаче это неотносится). Таким образом на вопрос можно порекомендовать использовать матрицу поворота. Если угловая скорость постоянна то ИМХО, результирующий угол будет равен исходный + угловая скорость * время. |
| Автор: Dubinsky 17.1.2006, 18:34 |
| матрица поворота ...слыхал ... я вот как подумал надо мне сделать : на тело действуют силы по 3 осям (1 вектор) две силы просто складываются , результирующее перемещение = сила*время\инерция на тело действуют моменты по 3 осям переводим момент по каждой оси в кватернион (получаем 3 кватерниона), умножаем 3 кватерниона и получаем рузультирующий кватернион который перемножаем с текущим кватернионом ориентации и получаем новый кватернион ориентации , из чего следует что хранить наверное удобно положение поворота тела в кватернионе ? как то же самое что я только что описал сделать матрицами ? момент вращения тела хранить как матрицу ? перемножить потом её на текущую матрицу положения тела и получить новое положение ? |
| Автор: Dubinsky 17.1.2006, 18:53 |
| т.е. как имея силы по трём осям и моменты по этим осям получить искомое новое положение и поворот ? |
| Автор: Dubinsky 18.1.2006, 12:18 |
| хмм , окей , потом эту матрицу умножаю на текущую матрицу положения тела ? ну да ... + я тут еще вот что подумал , если у меня есть сила , действующая на тело в точке , отличной от центра тяжести (стало быть сила не только двигает но и закручивает тело) то я могу найти три момента исходя из точки приложения силы и направления действия, потом просуммировать тройки моментов разных сил , действующих на это тело , потом просчитаю по этим моментам и моментам инерции новые углы по осям , переведу в матрицу поворота перемножу на матрицу положения тела и получу новое положение тела , вот стоит ли раскладывать силу на три момента чтобы потом эти моменты переводить в матрицу ? т.е. если есть сила вектор которой V(x,y,z) сила расположена относительно центра тяжести тела в точке F(x,y,z) и есть моменты инерции , есть какие то методы вычисления кроме того , который я только что попытался подытожить ? короче как оптимизировать вычисление результирующих моментов ? мне кажется тот способ что я понял довольно медленный будет ... |
| Автор: mr.DUDA 18.1.2006, 23:43 | ||
это надо у физиков спросить |
| Автор: maxim1000 19.1.2006, 03:00 |
| попробую вспомнить, чему нас учили на парах по физике в институте... 1. момент силы относительно какой-то точки - векторное произведение силы на плечо (вектор из точки, относительно которой считается, до точки приложения силы) 2. угловая скорость (вращения) - векторное произведение скорости точки на плечо (по-моему, тут оно плечом не называется, но означает то же самое) и деленная на квадрат длины плеча 3. угловое ускорение - производнаыя угловой скорости 4. момент инерции - интеграл по всему телу от r^2*dm (r - расстояние от текущей точки до точки, относительно которойвсе считается) (не исключаю, что ошибся в определениях, но надеюсь, только в мелочах) так что схема такая: 1. считаем сумму моментов каждой силы 2. делим его на момент инерции - получаем угловое ускорение 3. согласно нему корректируем угловую скорость 4. согласно угловой скорости поворачиваем тело ось вращения - направление вектора угловой скорости угол поворота - величина угловой скорости*dt |
| Автор: Dubinsky 19.1.2006, 20:40 |
| Во ! ближе к делу ! значит момент - векторное умножение плеча с силой (плечо - вектор из центра тяжести до точки приложения силы в метрах а сила вектор в ньютонах ) в результате получается некий сразу результирующий момент , который будет вектором , длина которого - величина момента а направление - ось момента ? вот только если мы получаем сразу момент вращения а не три его компоненты , как тогда высчитать момент инерции относительно любой оси ? я себе раньше представлял это так (грубо): Omega_x = M_Res_x/MInertia_x Omega_y = M_Res_y/MInertia_y и всё сводится к поиску искомых моментов по трём осям ...что по сути не есть гуд , наверное ... вот допусти по оси Х момент инерции равен 100 условных единиц , а по оси У 200 , вот на что делить момент вращения (который направлен не строго по осям а стоит произвольно да еще и меняет своё направление постоянно ) если момент инерции известен только по осям Х У и Зэд ? Моменты инерции как то надо задавать векторно чтоли ? и потом как то хитро умножать их на результирующий момент ? (слава богу начинает всё таки что-то прояснятся) однако с угловой скоростью можно еще раз что то не понял что за плечо там такое фигурирует ... |
| Автор: maxim1000 19.1.2006, 23:53 | ||||
там, наверное, вектор не из точки, относительно которой считается, а перпендикуляр на ось вращения в общем, определение угловой скорости - как обычно - линейная скорость/радиус окружности, по которой двигается точка определение через векторное произведение - для того, чтобы удобнее формализовать ее векторное представление
подумал немного... что-то действительно не сходится дело в том, что я довольно-таки смутно припоминаю все эти определения вполне возможно, что тамв качестве плеча будет выступать не вектор в точку, а перпендикуляр на ось вращения - вот и зависимость от оси а вообще, нужно поиграться с все теми же законами Ньютона но с учетом того, что се двигается не по прямой, а вращается... |