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

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

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

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

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

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

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

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

Должно быть так:

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

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