Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Заблокирован

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

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

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

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

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

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

8
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
04.07.2017, 14:22
Цитата Сообщение от MirageEngine Посмотреть сообщение
эти вектора и точка образуют новую систему координат
достаточно 3 векторов для образования новой системы координат, при чем здесь точка?
И вообще - напишите сначала все уравнения а потом пишите программу
0
Заблокирован
04.07.2017, 14:30  [ТС]
Цитата Сообщение от 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
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
04.07.2017, 14:46
Цитата Сообщение от MirageEngine Посмотреть сообщение
для этого и нужна точка.
нужно прежде всего правильно формулировать задачу, на мой взгляд
0
18 / 18 / 6
Регистрация: 02.07.2011
Сообщений: 67
04.07.2017, 14:47
qt использовать нежелательно?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
04.07.2017, 14:53
Цитата Сообщение от andreysv Посмотреть сообщение
qt использовать нежелательно?
QT - это вообще другой раздел форума
0
Заблокирован
04.07.2017, 15:25  [ТС]
Цитата Сообщение от afront Посмотреть сообщение
нужно прежде всего правильно формулировать задачу, на мой взгляд
ну да, согласен, я сам валенок
Цитата Сообщение от andreysv Посмотреть сообщение
qt использовать нежелательно?
нежелательно для кого?
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,920
Записей в блоге: 4
04.07.2017, 17:05
А почему появилась матрица 4x4 вы собираетесь переходить к однородным координатам?

Добавлено через 1 час 8 минут
MirageEngine, Вы можете объяснить, что вы понимаете под матрицей трансформации?
0
Заблокирован
05.07.2017, 01:09  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.07.2017, 01:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru