Форум: "Игры";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизКак повернуть матрицу вокруг заданного вектора на определённый Найти похожие ветки
← →
TGLCube (2007-02-04 04:14) [0]угол?
1) Так, правильно поворачивать?
M1 := GLCube.Matrix;
RotateVector(M1[0], RotVector, RotAngle);
RotateVector(M1[1], RotVector, RotAngle);
RotateVector(M1[2], RotVector, RotAngle);
GLCube.Matrix := M1;
Это GLScene.
2) Более быстрый способ?
← →
Rial © (2007-02-05 06:53) [1]При повороте вектора на угол используются простые формулы.
Например, при повороте по оси Z:
OutX :=X * Cs - Y * Sn;
OutY :=Y * Cs + X * Sn;
Теперь, если нужно сделать поворот не в 2х координатах,
а относительно вектора.
(поворачиваем A относительно B)
1) С помощью обратной формулы полуаем коэффициенты
поворота, на которые нужно было бы повернуть B,
чтобы он был || Z. Поворачиваем его.
Т.е. имеем повороты по X и по Y.
Нужно вычислить сначала поворот по X, переместив т.о.
вектор B в плоскость XY.
Следующим поворотом делаем его ||Z.
Все четыре коэффициента (Sn1, Cs1, Sn2, Cs2) запоминаем.
2)Теперь все просто - поворот опять в 2х координатах,
т.к. вектор, относительно которого вращаем - перпендикулярен XY.
3)Не забываем, что B был повернут.
Имея старые коэффициенты поворативаем координаты A,
компенсируя поворот B.
Итого получаем для 1 поворота 4 * 10 умножений,
2 * 10 сложений и 1 вызов SinCos (нахожнение Cs0, Sn0).
Формулы не пишу - найди их сам.
Т.к. RotAngle постоянный, то желательно Cs0, Sn0 посчитать
1 раз, т.о. в итоге поучется опять же всего один вызов
медленного SinCos.
← →
@!!ex © (2007-02-05 09:30) [2]
> вокруг заданного вектора на определённый угол
Это описание кватерниона в чистом виде.
← →
TGLCube (2007-02-06 07:47) [3]
> Rial © (05.02.07 06:53) [1]
Нужна не лекция, а функция. ПонимаешЬ?
> @!!ex © (05.02.07 09:30) [2]
> > вокруг заданного вектора на определённый угол
> Это описание кватерниона в чистом виде.
Уговорил. Как повернуть кватернион вокруг заданной оси на заданной угол.
← →
Rial © (2007-02-06 09:40) [4]> > Rial © (05.02.07 06:53) [1]
>
> Нужна не лекция, а функция. ПонимаешЬ?
Я например люблю лекции.
У меня функция работает точно так, как я описал.
Скорости мне лично хватает.
Тебе осталось только вывести 1 формулу из 2 строк самому
и написать 40-50 строк кода.
Функцию ему... а я ленивым помогать не подписывался %).
← →
@!!ex © (2007-02-06 10:09) [5]
> TGLCube (06.02.07 07:47) [3]
Кватернион - это скаляр и вектор. :)
Где вектор - это ось, а скаляр - угол.
Я могу дать тебе формулы, но не вижу смысла.
Копай в инете по кватернионам, благо инфы по ним вагоны.
Пригодиться и понимание кватернионов(там на самом деле нет ничего сложного, хоть в начале и кажеться иначе) и умение правильно искать инфу в инете.
← →
TGLCube (2007-02-07 02:59) [6]
> Rial © (06.02.07 09:40) [4]
> помогать не подписывался %).
Тогда чего на форум вообще пришёл?
> @!!ex © (06.02.07 10:09) [5]
> Копай в инете
Какой ты банальный.
← →
@!!ex © (2007-02-07 12:10) [7]
> TGLCube (07.02.07 02:59) [6]
Помощь и разжевывание - разные вещи.
Инфы у тебя более чем достаточно. Если не умеешь ею пользоваться, это уже твои проблемы.
← →
Rial © (2007-02-07 18:56) [8]> [6] TGLCube (07.02.07 02:59)
> Тогда чего на форум вообще пришёл?
Вот сейчас обижусь и не приду больше :).
http://ln.com.ua/~openxs/articles/smart-questions-ru
Если прочитаешь, то как вывод:
давать готовый код - это не итересно.
Готовый код - это работа, на крайний случай - учеба.
А форум - это место для обсуждение чего либо.
И в чем интерес обсуждать готовый рабочий код ?
> Какой ты банальный.
После такого ответа ты значительно снижаешь
свои шансы на успех.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.052 c