![]() |
|
|
![]()
|
|
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
Подскажите формулу по которой можно найти координаты 3d тела при вращение если известен угол на которое тело было повернуто(центр вращения-цент фигуры)
-------------------- ![]() ![]() |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
тут еще надо знать вокруг чего тело вращалось...
-------------------- qqq |
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
тело вращается вокруг центра фигуры(т.е. вокруг своей оси)
я же написал -------------------- ![]() ![]() |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ох... представим себе человека
когда он стоит на земле, он может крутиться, например, направо - в горизонтальной плоскости, т.е. вокруг вертикальной оси когда это какой-то гимнаст на кольцах, он может крутиться в вертикальной плоскости (т.е. вокруг горизонтальной оси) и в том, и в другом случае они вертятся вокруг своего центра... -------------------- qqq |
|||
|
||||
| Dr.Wisdom |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 6.1.2005 Репутация: нет Всего: 0 |
Вообще имелось ввиду вокруг оси или точки.
Это точно было в курсе аналитической геометрии. Не помню убейте меня не помню. Учебник - погорелов. (или проскуряков) в общем аналитическая геометрия. там простое преобразование матриц. А сточки зрения матана то напиши преобразование плоскости в сферу и бери любую функцию на плоскости. После преобразования произоыдет поворот. Вообще поворот, случайное движение.... я отвлекся. Вращение вокруг оси - перемещение в плоскости ей перпендикулярной. Плоскость перпендикулярная вектору ..... э-э-э-э-х не помню простая формула. --------------------
VIVA LA RESISTANCE |
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
у меня есть формула вращения двух мерного тела вокруг оси
x = xo + r * cos(alpha + beta) y = yo + r * sin(alpha + beta) xo,yo - центр поворота, r - длина отрезка OM O - это центр поворота, M - некая точк угол alpha между отрезком OM и горизонталью beta-угол поворота а мне нужно вращать тело вокруг центра(задаётся 3 угла и координаты точки надо найти новые координаты точки) -------------------- ![]() ![]() |
|||
|
||||
| DENNN |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Очень мне это формулировка нравится:
При такой формулировке вращать можно как угодно и "куда" угодно - все будет верно Это сообщение отредактировал(а) DENNN - 20.10.2005, 16:12 |
||||
|
|||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Gigabyte может тебе нужно найти новые координаты вершин какой - нибудь фигуры? Потому что если фигура вращается вокруг своего центра, то координаты центра не меняются
|
|||
|
||||
| yaja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Ну наверное что-то вроде
a - a0 = r * A A = cos(y) -sin(y) 0 sin(y) cos(y) 0 0 0 1 такая вот матрица, если вращать по по z. аналогично для осей х и у. Если что-то другое, то плохо дело Можно канечно представить, как композицию двух поворотов, но есть формула для поворота вокруг произвольной оси работающая быстрее |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
cardinal напиши пожалуйста формулу которой ты пользовался в своём примере
-------------------- ![]() ![]() |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Тут в коде все формулы есть: http://forum.vingrad.ru/index.php?showtopi...ndpost&p=150469 А ты напиши откуда ты -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
А вот это формулы для того, чтобы поворачивать одновременно на углы альфа, бета и гамма вокруг всех осей. То есть не на определенный угол вокруг оси, например x, а вокруг нескольких сразу. Это вырезка из кода как я заметил не очень здорово прокомметирована поэтому, если есть вопросы то пиши…
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Аффинные преобразования вас спасут.
|
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
в смысле откуда из какого города? С-Пб!!!! -------------------- ![]() ![]() |
|||
|
||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
cardinal
Не знаю рочему но когда я переписал этот код на Дельфи то у меня ничего не работает написал вроде правильно??? -------------------- ![]() ![]() |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Угу... Что не работает? Координаты точек не те или что? -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Гость_Bob |
|
||||
|
Unregistered |
В любом случае вращение лучше делать с помощью матриц. Вращение 2д тела может выглядеть так: Матрица (3 на 3) вращения: cos® -sin® 0 sin® cos® 0 0 0 1 где r - угол поворода. Вектор выглядит так: x y 1 где х и у координаты одной точки. Если этот вектор умножить на матрицу, то в результате получится вектор с новыми координатами х и у. Для трехмерного вращения надо использовать матрицу 4 на 4 и вектор: x y z 1 Вот например функция умножения матрицы (4 на 4) на вектор из 4 элементов:
|
||||
|
|||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
кто нибудь может написать пример с матрицей не на си а в виде алгоритма или на Дельфи
а то я не очень разобрался?!?! cardinal у меня координаты точки вообще левые а при некоторых углах совсем не меняются не могу понять в чем дело -------------------- ![]() ![]() |
|||
|
||||
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Построчно пройдись по коду и посмотри, что не так работает как ты ожидаешь... Добавлено @ 19:49
Может это поможет... http://www.gamedev.ru/coding/20614.shtml -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
| Gigabyte |
|
|||
|
Студент-халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 1.11.2004 Где: ПЫтер Репутация: нет Всего: 3 |
Хоть кто-то может написать формулу для вычисления новых координат хотябы в плоскости,
а не пример!!!!!! -------------------- ![]() ![]() |
|||
|
||||
| DENNN |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Специально для тех, кто плохо учился в школе и не всостоянии прочитать учебник геометрии: 1) поворот на угол альфа вокруг точки с коорд. (0;0)
2)параллельный перенос плоской геометрической фигуры на вектор (x1;y1)
Сложно? Для 3-хмерки важно понимать как вообще можно задать поворот фигуры: относительно осей, либо вектора. Использование карандаша, бумажки, линейки и собственной головы поможет разобраться в том, что же вам все таки нужно (читай поможет вывести необходимые для данной задачи формулы). |
||||||
|
|||||||
| yaja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Нашел исходник темы, где мне приходилось делать преобразование координат(в частности и поворот вокруг оси), делал посредством матриц. Тоесть дана единичная матрица 4x4 (считай базис в пространстве), тогда после поворота, он будет выглядить так
Дело было давно, ничего не помню, особо разбираться откуда это, влом Чтобы узнать координаты вектора после поворота, достаточно умножить его на полученную матрицу |
|||
|
||||
| yaja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
ПРочитал, что на практике для поворотов чаще всего используют квантерионы (читай 4-х векторы с особым правилом умножения). Квантерион выглядит, как q = [s, v], где s - скаляр, v - вектор.
[s1, v1] * [s2, v2] = [s1 * s2 - <v1, v2>, s1 * v2 + s2 * v1 + v1Xv2] q^-1 = (1 / ||q||)^2 * [s, -v] Тогда, чтобы повернуть вектор v (тоесть квантерион [0, v]) используя операции с квантерионами, надо посчитать v` = Rot(v) = q * v * q^-1 q - квантерион поворота вокруг оси (x, y, z) на угл y, q = [cos(y / 2), sin(y / 2) * (x, y, z)] |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |