3D направления (сломал мозг)

Обсуждение вопросов, связанных с обработкой аудио и видео информации
Ответить
Artem.spb

Activity Автор
expert
expert
Сообщения: 1887
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

3D направления (сломал мозг)

Сообщение Artem.spb »

Коллеги, спасите.
Мозг сломал с 3Д-трансформациями.
Задача: есть две точки в пространстве (координаты известны). Надо нарисовать между ними "палку". В итоге вместо палки должна быть осмысленная фигура, но пока разминаюсь на кошках.
Зелёная и синяя оси Z должны идти вдоль одной линии Оттуда, где начинается зелёная, туда, где начинается синяя.
Снимок.PNG
На больших расстояниях оно даже похоже на правду, но при приближении плоскостей друг у другу, оси разбегаются.

ситуация осложняется нестандартностью ориентации осей в :labview:
Подскажите, где ошибка.
Если есть рецепт поворота проще, то и ошибку указывать не нужно :)
В коде сначала вращаю вокруг Z, потому что это фиксированный разворот.
Вот как это выглядит.
Снимок2.PNG
Т.е. если вместо осей нарисовать палку с ручкой, то ручка должна смотреть в одну и ту же сторону при наклонах палки.

В приложении вся функция
Вложения
Untitled 4.vi
LV2012
(39.67 КБ) 46 скачиваний

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4924
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: 3D направления (сломал мозг)

Сообщение IvanLis »

Должно быть так:
https://youtu.be/WPy3euITZFI
Stewart-ForArtem.vi
lv2015
(61.39 КБ) 42 скачивания
Проблема в том, что при использовании углов Эйлера конечный результат серии вращений зависит от порядка промежуточных вращений, иногда случается, что вращение вокруг одной оси отображается на вращение вокруг другой оси. Это называется "Шарнирный замок" - "Gimbal lock".
Для обхода этой ситуации необходимо (последовательность может изменяться):
1. вычислить угол поворота относительно оси X, сформировать матрицу трансформации
2. довернуть объект на угол противоположный X (в противоположную сторону)
3. вычислить угол поворота относительно оси Y (при условии, что X уже компенсировали), сформировать матрицу трансформации
4. перемножить две матрицы трансформации и получится матрица трансформации с необходимым направлением

Ответить

Вернуться в «Работа с графикой и звуком»