Страница 1 из 1

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

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

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

В приложении вся функция

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

Добавлено: 09 июн 2019, 19:00
IvanLis
Должно быть так:

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