Заблокирован
1

Построение матрицы трансформации 4х4 по 3-м векторам и точке

04.07.2017, 11:37. Показов 2810. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
3D пространство. Есть три вектора направления и одна точка в пространстве.
Грубо говоря эти вектора и точка образуют новую систему координат. Для простоты возьмём, что все вектора ортогональны (хотя это может быт и не так), а точка лежит в начале координат новой системы координат.
Собственно, как построить матрицу трансформаций 4х4 по этим данным? (матрица поворота / переноса).
P.S.: нужно для того, что бы массив точек, лежащих в одной плоскости, перенести на другую плоскость, дабы избавится от одной координаты для 2Д триангуляции.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2017, 11:37
Ответы с готовыми решениями:

Составить программу нахождения сумы двух матриц Х(4Х4) и У(4Х4). Элементы матрицы – действительные числа
Составить программу нахождения сумы двух матриц Х(4Х4) и У(4Х4). Элементы матрицы – действительные...

3D и матрицы трансформации
Я пишу 3D графический движок, и вот возникла проблема: я создал свой класс матрицы, а в ней функцию...

Вычисление определителя матрицы 4х4
Доброго времени суток господа, может кто-то расписать подробно как искать определитель матрицы 4х4?...

Вычисление определителя матрицы 4х4
#include <stdio.h> int main() { int B,i,j,det; printf("MATRIX 3x3:\n"); for (i=0;i<3;i++) ...

8
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
04.07.2017, 14:22 2
Цитата Сообщение от MirageEngine Посмотреть сообщение
эти вектора и точка образуют новую систему координат
достаточно 3 векторов для образования новой системы координат, при чем здесь точка?
И вообще - напишите сначала все уравнения а потом пишите программу
0
Заблокирован
04.07.2017, 14:30  [ТС] 3
Цитата Сообщение от afront Посмотреть сообщение
достаточно 3 векторов для образования новой системы координат, при чем здесь точка?
Как причём? Новая система координат - не обязательно просто повёрнутая старая, она же может быть и перенесена куда - нибуть в сторону, для этого и нужна точка.
В общем, на Qt это делается так:
C++ (Qt)
1
2
3
4
5
6
QVector3D d = QVector3D(1,1,1).normalized();
QQuaternion q(0, d);
 
QMatrix4x4 m;
m.rotate(q);
m.translate(2,2,2);
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
04.07.2017, 14:46 4
Цитата Сообщение от MirageEngine Посмотреть сообщение
для этого и нужна точка.
нужно прежде всего правильно формулировать задачу, на мой взгляд
0
18 / 18 / 6
Регистрация: 02.07.2011
Сообщений: 67
04.07.2017, 14:47 5
qt использовать нежелательно?
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
04.07.2017, 14:53 6
Цитата Сообщение от andreysv Посмотреть сообщение
qt использовать нежелательно?
QT - это вообще другой раздел форума
0
Заблокирован
04.07.2017, 15:25  [ТС] 7
Цитата Сообщение от afront Посмотреть сообщение
нужно прежде всего правильно формулировать задачу, на мой взгляд
ну да, согласен, я сам валенок
Цитата Сообщение от andreysv Посмотреть сообщение
qt использовать нежелательно?
нежелательно для кого?
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,816
Записей в блоге: 4
04.07.2017, 17:05 8
А почему появилась матрица 4x4 вы собираетесь переходить к однородным координатам?

Добавлено через 1 час 8 минут
MirageEngine, Вы можете объяснить, что вы понимаете под матрицей трансформации?
0
Заблокирован
05.07.2017, 01:09  [ТС] 9
Цитата Сообщение от palva Посмотреть сообщение
Вы можете объяснить, что вы понимаете под матрицей трансформации?
Да я там сначала не правильно мысль выразил. В общем, у меня была такая ситуация:
1. Есть замкнутая полилиния, состоящая из точек, которые лежат в одной какой - то плоскости в пространстве. Мне нужно этот полигон, очертанный полилиний, протреангулировать, что бы на площади полигоны появились треугольники, для дальнейшей отправки на рендер в OpenGL. Нормальной библиотеки для 3D треангуляции face-а я не нашёл, по этому решил поворачивать плоскость с 3D точками полилинии в сторону одной из главных плоскостей, ну там XY, XZ и пр, чо бы исчезла одна координата, что бы как бы в 2D произвёл треангуляцию посредствам poly2tri и потом бы инвертированной матрицей обратно бы всё вернул в 3D. В общем, после долгих колупаний темы, я решил задачу на Qt:

C++ (Qt)
1
2
3
4
5
6
7
8
9
            QVector3D dir1 = p[1]->getPosition() - p[0]->getPosition();
            QVector3D dir2 = p[3]->getPosition() - p[0]->getPosition();
            QVector3D normal = QVector3D::crossProduct(dir1, dir2).normalized();
 
            QVector3D dirY(0.0f, 1.0f, 0.0f);
            float angY = acos(QVector3D::dotProduct(dirY, normal))*180.0/M_PI;
            QVector3D rd = QVector3D::crossProduct(dirY, normal);
            QMatrix4x4 m;
            m.rotate(angY, rd);
В общем, беру два вектора на плоскости, по ним получаю нормаль и ищу угол между нормалью и главной плоскостью, так же ищу направление вращения.

Добавлено через 15 секунд
Цитата Сообщение от palva Посмотреть сообщение
Вы можете объяснить, что вы понимаете под матрицей трансформации?
Да я там сначала не правильно мысль выразил. В общем, у меня была такая ситуация:
1. Есть замкнутая полилиния, состоящая из точек, которые лежат в одной какой - то плоскости в пространстве. Мне нужно этот полигон, очертанный полилиний, протреангулировать, что бы на площади полигоны появились треугольники, для дальнейшей отправки на рендер в OpenGL. Нормальной библиотеки для 3D треангуляции face-а я не нашёл, по этому решил поворачивать плоскость с 3D точками полилинии в сторону одной из главных плоскостей, ну там XY, XZ и пр, чо бы исчезла одна координата, что бы как бы в 2D произвёл треангуляцию посредствам poly2tri и потом бы инвертированной матрицей обратно бы всё вернул в 3D. В общем, после долгих колупаний темы, я решил задачу на Qt:

C++ (Qt)
1
2
3
4
5
6
7
8
9
            QVector3D dir1 = p[1]->getPosition() - p[0]->getPosition();
            QVector3D dir2 = p[3]->getPosition() - p[0]->getPosition();
            QVector3D normal = QVector3D::crossProduct(dir1, dir2).normalized();
 
            QVector3D dirY(0.0f, 1.0f, 0.0f);
            float angY = acos(QVector3D::dotProduct(dirY, normal))*180.0/M_PI;
            QVector3D rd = QVector3D::crossProduct(dirY, normal);
            QMatrix4x4 m;
            m.rotate(angY, rd);
В общем, беру два вектора на плоскости, по ним получаю нормаль и ищу угол между нормалью и главной плоскостью, так же ищу направление вращения.
0
05.07.2017, 01:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2017, 01:09
Помогаю со студенческими работами здесь

Определение матрицы перехода 4х4 по 4 точкам (X, Y, Z)
Добрый день! Есть базовая система координат (СК). В этой СК нам известны координаты 4 точек (X,...

Определение ранга квадратной матрицы 4Х4
Нужно сделать функцию по определению ранга матрицы 4Х4. И вот пока нет мыслей насчет этого. Первый...

Найти наибольший элемент матрицы 4х4
найти наибольший элемент матрицы 4х4.

Метод Крамера для матрицы 4х4
Не знаю, честно, что не так. по этой же схеме для матрицы 3х3 метод работает. для 4х4 считает не те...

Создание матрицы последовательных чисел 4х4
Здравствуйте! Заполняю 16 ячеек (4х4) числами 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...

Подключение матрицы кнопок 4х4 к Arduino
Подскажите пожалуйста пример скетча для подключения матрицы кнопок 4х4 к ардуине? Поиском...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru