![]() |
|
Модераторы: Rickert |
![]()
|
|
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Уважаемые знатоки , писал когда-то маленькие игрухи в 3Д окружении но с 2Д физикой (камера в одной плоскости и все действия происходили тоже только в строго одной плоскости , однако модельки были 3Д ну и всё такое)
так вот в таком случае с физикой было просто : есть точка положения объекта , вектор скорости , и единственный угол поворота + момент + момент инерции.Но вот стоило мне перейти в 3Д мир , как всё просто стало вконец непонятным ... есть тело в космосе , у него есть положение (x,y,z) и есть некий вектор его скорости (x,y,z) тут всё ясно как вычислить новое положение тела в пространстве , но как быть с поворотом тела ? есть моменты по осям (Pitch , Yaw , Roll) а как теперь вычислить результирующее положение тела ? и как это самое положение (поворот) лучше всего представить ? вообще не пойму даже с чего начать ... |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Положение объекты удобней всего описывать матрицей преобразование. Матрица афинных преобразований способна учитывать параллельный перенос, поворот и масштабирование (+ неортогональность осей координат, но к задаче это неотносится). Таким образом на вопрос
можно порекомендовать использовать матрицу поворота. Если угловая скорость постоянна то ИМХО, результирующий угол будет равен исходный + угловая скорость * время. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
матрица поворота ...слыхал ... я вот как подумал надо мне сделать :
на тело действуют силы по 3 осям (1 вектор) две силы просто складываются , результирующее перемещение = сила*время\инерция на тело действуют моменты по 3 осям переводим момент по каждой оси в кватернион (получаем 3 кватерниона), умножаем 3 кватерниона и получаем рузультирующий кватернион который перемножаем с текущим кватернионом ориентации и получаем новый кватернион ориентации , из чего следует что хранить наверное удобно положение поворота тела в кватернионе ? как то же самое что я только что описал сделать матрицами ? момент вращения тела хранить как матрицу ? перемножить потом её на текущую матрицу положения тела и получить новое положение ? Это сообщение отредактировал(а) Dubinsky - 17.1.2006, 18:39 |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
т.е. как имея силы по трём осям и моменты по этим осям получить искомое новое положение и поворот ?
|
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Если тебе удобнее работать с кватернионами - работай с ними и забудь о матрицах З.Ы. получить матрицу ориентации, зная yaw, roll и pitch, можно так:
(код на C#) -------------------- ![]() |
||||
|
|||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
хмм , окей , потом эту матрицу умножаю на текущую матрицу положения тела ? ну да ...
+ я тут еще вот что подумал , если у меня есть сила , действующая на тело в точке , отличной от центра тяжести (стало быть сила не только двигает но и закручивает тело) то я могу найти три момента исходя из точки приложения силы и направления действия, потом просуммировать тройки моментов разных сил , действующих на это тело , потом просчитаю по этим моментам и моментам инерции новые углы по осям , переведу в матрицу поворота перемножу на матрицу положения тела и получу новое положение тела , вот стоит ли раскладывать силу на три момента чтобы потом эти моменты переводить в матрицу ? т.е. если есть сила вектор которой V(x,y,z) сила расположена относительно центра тяжести тела в точке F(x,y,z) и есть моменты инерции , есть какие то методы вычисления кроме того , который я только что попытался подытожить ? короче как оптимизировать вычисление результирующих моментов ? мне кажется тот способ что я понял довольно медленный будет ... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
это надо у физиков спросить -------------------- ![]() |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
попробую вспомнить, чему нас учили на парах по физике в институте...
1. момент силы относительно какой-то точки - векторное произведение силы на плечо (вектор из точки, относительно которой считается, до точки приложения силы) 2. угловая скорость (вращения) - векторное произведение скорости точки на плечо (по-моему, тут оно плечом не называется, но означает то же самое) и деленная на квадрат длины плеча 3. угловое ускорение - производнаыя угловой скорости 4. момент инерции - интеграл по всему телу от r^2*dm (r - расстояние от текущей точки до точки, относительно которойвсе считается) (не исключаю, что ошибся в определениях, но надеюсь, только в мелочах) так что схема такая: 1. считаем сумму моментов каждой силы 2. делим его на момент инерции - получаем угловое ускорение 3. согласно нему корректируем угловую скорость 4. согласно угловой скорости поворачиваем тело ось вращения - направление вектора угловой скорости угол поворота - величина угловой скорости*dt -------------------- qqq |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Во ! ближе к делу !
значит момент - векторное умножение плеча с силой (плечо - вектор из центра тяжести до точки приложения силы в метрах а сила вектор в ньютонах ) в результате получается некий сразу результирующий момент , который будет вектором , длина которого - величина момента а направление - ось момента ? вот только если мы получаем сразу момент вращения а не три его компоненты , как тогда высчитать момент инерции относительно любой оси ? я себе раньше представлял это так (грубо): Omega_x = M_Res_x/MInertia_x Omega_y = M_Res_y/MInertia_y и всё сводится к поиску искомых моментов по трём осям ...что по сути не есть гуд , наверное ... вот допусти по оси Х момент инерции равен 100 условных единиц , а по оси У 200 , вот на что делить момент вращения (который направлен не строго по осям а стоит произвольно да еще и меняет своё направление постоянно ) если момент инерции известен только по осям Х У и Зэд ? Моменты инерции как то надо задавать векторно чтоли ? и потом как то хитро умножать их на результирующий момент ? (слава богу начинает всё таки что-то прояснятся) однако с угловой скоростью можно еще раз что то не понял что за плечо там такое фигурирует ... Это сообщение отредактировал(а) Dubinsky - 19.1.2006, 20:40 |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
там, наверное, вектор не из точки, относительно которой считается, а перпендикуляр на ось вращения в общем, определение угловой скорости - как обычно - линейная скорость/радиус окружности, по которой двигается точка определение через векторное произведение - для того, чтобы удобнее формализовать ее векторное представление
подумал немного... что-то действительно не сходится дело в том, что я довольно-таки смутно припоминаю все эти определения вполне возможно, что тамв качестве плеча будет выступать не вектор в точку, а перпендикуляр на ось вращения - вот и зависимость от оси а вообще, нужно поиграться с все теми же законами Ньютона но с учетом того, что се двигается не по прямой, а вращается... -------------------- qqq |
||||
|
|||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |