![]() |
|
|
![]()
|
|
| 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. |