Посчитать матрицу
От: ZakkeR Россия http://znav.narod.ru
Дата: 05.09.03 07:59
Оценка:
Обращаюсь к гуру высшей математики!

Есть треугольник, лежащий в плоскости Z=0.
Есть единичный вектор (vx,vy,vz)
Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
Дайте плз формулу, а то у меня уже мозги совсем не варят
regards
Re: Посчитать матрицу
От: uzzy Россия  
Дата: 05.09.03 08:22
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Обращаюсь к гуру высшей математики!


ZR>Есть треугольник, лежащий в плоскости Z=0.

ZR>Есть единичный вектор (vx,vy,vz)
ZR>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
ZR>Дайте плз формулу, а то у меня уже мозги совсем не варят

Тебе случаем не матрицы афинных преобразований нужны?
... << RSDN@Home 1.1 beta 1 >>
Re: Посчитать матрицу
От: Вадим Никулин Россия Здесь
Дата: 05.09.03 08:42
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Обращаюсь к гуру высшей математики!


ZR>Есть треугольник, лежащий в плоскости Z=0.

ZR>Есть единичный вектор (vx,vy,vz)
ZR>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
ZR>Дайте плз формулу, а то у меня уже мозги совсем не варят

Слабо представляю, как ты собираешься умножить матрицу 4x4 на точку
Re: Посчитать матрицу
От: Кодт Россия  
Дата: 05.09.03 08:48
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Обращаюсь к гуру высшей математики!


ZR>Есть треугольник, лежащий в плоскости Z=0.

ZR>Есть единичный вектор (vx,vy,vz)
ZR>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
ZR>Дайте плз формулу, а то у меня уже мозги совсем не варят

Единичный вектор z = <0,0,1> — нормаль к исходной плоскости P.
Единичный вектор v — нормаль к плоскости S.

Фактически, нам нужно аффинное преобразование, которое поворачивает плоскость P в S.
Или, для любой точки пространства, совершает поворот на угол между z и v.
(Затем в самой плоскости S можно еще совершить вращение — это уже "произвольная программа").

Матрица получится не 4*4, а 3*3 (из 3-мерного в 3-мерное); с учетом, что исходные точки лежат в плоскости P, можно отбросить 3-ю строку — получим матрицу 2*3.
Перекуём баги на фичи!
Re: Посчитать матрицу
От: lazyden  
Дата: 05.09.03 16:14
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Есть треугольник, лежащий в плоскости Z=0.

ZR>Есть единичный вектор (vx,vy,vz)
ZR>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
Надо использовать поинтер :) с названием Quaternion.
Другими словами надо совместить z с v, поворачивая z вокруг n, где n --- нормаль к плоскости (z-o-v). Если при этом одновременно поворачивать и плоскость
(x-o-y) вместе с треугольником :), то после поворота он будет
ориентирован согласно условию задачи.

...z...v..............
...|../...............
...|./................
...|/ ................
...o-------------y
../.\.................
./...\................
n.....\...............
.......x..............

Т.е. нам надо построить матрицу поворота вокруг оси n на угол
alpha между векторами z и v. Для решения таких задач (и не
только:) существует штука — Quaternion. Подробно на
http://www.flipcode.com/documents/matrfaq.html

Документе читать в таком порядке (хотя лучше прочитать все:)
— Q47. What are quaternions?
Грубо говоря кватерион --- четверка чисел |x y z w|. Их интерпретация зависит от применения.
Для нашей задачи (очень условно) |x y z| — вектор n, w — угол поворота.
— Q56. How do I convert a rotation axis and angle to a quaternion
Как получить |x y z w| зная вектор вращения n и угол поворота alpha.
— Q52. How do I normalise a quaternion?
— Q54. How do I convert a quaternion to a rotation matrix?
Тут получаем требуемую матрыцю :)

Для Q56 есть две подзадачи
— получить вектор n
— sin(alpha/2) и cos(alpha/2)
Вектор n получаем как векторное произведения z и v.
cos(alpha/2)=sqrt( (1+cos(alpha)) / 2 )
sin(alpha/2)=sqrt( (1-cos(alpha)) / 2 )
Значение cos(alpha) получаем как скалярное произведение z и v

Все.
Re: Посчитать матрицу
От: ZakkeR Россия http://znav.narod.ru
Дата: 07.09.03 23:28
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Обращаюсь к гуру высшей математики!


ZR>Есть треугольник, лежащий в плоскости Z=0.

ZR>Есть единичный вектор (vx,vy,vz)
ZR>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
ZR>Дайте плз формулу, а то у меня уже мозги совсем не варят

Народ, спасибо, но теорию (в теории) я знаю
И что такое кватернионы, я тожа знаю. Но хочется без них. Хочется максимально быстро получить простую (надеюсь) формулу.
Я хотел получть что-то вроде: умножь это сюда, а вот это сюда, потом перемнож вот это и вот это и у тебя получится искомая матрица. Я ведь не зря обращался именно к гуру, для кого глянув на условие, не составляет труда прикинуть, как будет выглядеть формула. У меня на это уйдет пол дня. Сначала построю многоэтажную формулу, затем буду ее в поте лица упрощать... Чем я сейчас и займусь...



ps:
А что касается умноженя матрицы на точку, то я этого делать не собирался. А вот точку на матрицу буду и много раз:

Tochka = (x,y,z,1)

Matrica =
M11 M12 M13 M14
M21 M22 M23 M24
M31 M32 M33 M34
M41 M42 M43 M44

Tochka * Matrica = Tochka2

Правда, как справедливо заметил Кодт, тут хватит и меньшей размерности матрицы, но я в любом случае работаю с матрицами 4x4, т.к. мне еще и переносом заниматься надо.
regards
Re[2]: Посчитать матрицу
От: ZakkeR Россия http://znav.narod.ru
Дата: 08.09.03 02:56
Оценка:
Здравствуйте, ZakkeR, Вы писали:

ZR>Здравствуйте, ZakkeR, Вы писали:


ZR>>Обращаюсь к гуру высшей математики!


ZR>>Есть треугольник, лежащий в плоскости Z=0.

ZR>>Есть единичный вектор (vx,vy,vz)
ZR>>Нужно сделать матрицу 4x4 такую, чтобы при умножении каждой точки треугольника на эту матрицу, получался треугольник, повернутый вокруг точки (0,0,0) и перпендикулярный вектору.
ZR>>Дайте плз формулу, а то у меня уже мозги совсем не варят


Народ, всем отбой.
В моем случае искомой матрицей оказалась инвертированная видовая матрица. А таковая у меня уже имеется
regards
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.