Russian Qt Forum
Март 29, 2024, 13:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определить проекции вектора гравитации на три оси зная углы поворота по осям  (Прочитано 3317 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Март 19, 2021, 10:46 »

Всем привет.

Чую, мне кирдык.

Есть ли вариант пересчитать углы поворота вокруг осей X,Y,Z в проекции вектора гравитации на эти оси?

Тут нашел пример http://bitaks.com/resources/inclinometer/content.html,
но там приведены прямые формулы - т.е. они получают углы из проекций, а мне надо наоборот
- проекции из углов:

Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 19, 2021, 11:15 »

Есть ли вариант пересчитать углы поворота вокруг осей X,Y,Z в проекции вектора гравитации на эти оси?

Тут нашел пример http://bitaks.com/resources/inclinometer/content.html,
но там приведены прямые формулы - т.е. они получают углы из проекций, а мне надо наоборот
- проекции из углов:
Не понял. Может так:

- есть заданный начальный вектор (ненулевой). Он поворачивается на заданные углы, порядок поворота XYZ. Найти повернутый вектор
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #2 : Март 19, 2021, 11:20 »

Есть ли вариант пересчитать углы поворота вокруг осей X,Y,Z в проекции вектора гравитации на эти оси?
Тут нашел пример http://bitaks.com/resources/inclinometer/content.html,
но там приведены прямые формулы - т.е. они получают углы из проекций, а мне надо наоборот

Нужно выразить Ax, Ay, Az из представленных формул? Да...  Шокированный
Взять тангенс и возвести в квадрат каждое из уравнений и ...
Получается сложнейшая система из 3-х линейных уравнений относительно A2x, A2y, A2z.

Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Март 19, 2021, 11:31 »

Цитата: Igors
Не понял. Может так:

Есть вектор гравитации G - он направлен всегда вниз по оси Z. Его длина всегда равна 1-це.

Есть акселерометр, у него есть тоже три оси X,Y,Z (типа система координат, связанная с ним).

Допустим, если он лежит горизонтально, то его ось Z совпадает с вектором гравитации Z, а оси
X,Y - перпендикулярны..

В итоге имеем, что проекция гравитации на ось Z - равна 1-це, а на остальные оси - по нулям.

Теперь, вращаем акселерометр вокруг оси Y, против часовой стрелки на 45 градусов.
Тогда угол альфа станет 45 градусов - и следовательно, проекции вектора гравитации на оси
акселерометра изменятся.

Теперь добавится какая то составляющая по оси X, а по оси Z - уменьшится..

Так вот.. найти эти составляющие - проекции.

Цитата: ssoft
Получается сложнейшая система из 3-х линейных уравнений относительно A2x, A2y, A2z.

Именно, и по ходу нерешаемая.

Может есть другие варианты как это делается?
« Последнее редактирование: Март 19, 2021, 11:38 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Март 19, 2021, 11:57 »

Есть вектор гравитации G - он направлен всегда вниз по оси Z. Его длина всегда равна 1-це.

Есть акселерометр, у него есть тоже три оси X,Y,Z (типа система координат, связанная с ним).

Допустим, если он лежит горизонтально, то его ось Z совпадает с вектором гравитации Z, а оси
X,Y - перпендикулярны..

В итоге имеем, что проекция гравитации на ось Z - равна 1-це, а на остальные оси - по нулям.

Теперь, вращаем акселерометр вокруг оси Y, против часовой стрелки на 45 градусов.
Тогда угол альфа станет 45 градусов - и следовательно, проекции вектора гравитации на оси
акселерометра изменятся.

Теперь добавится какая то составляющая по оси X, а по оси Z - уменьшится..

Так вот.. найти эти составляющие - проекции.
Ну стало быть найти  вектор гравитации в СК прибора.

Код
C++ (Qt)
// матрица прибора, порядок вращений XYZ
QMatrix4 m;
m.rotate(angleZ, 0, 0, 1);
m.rotate(angleY, 0, 1, 0);
m.rotate(angleX, 1, 0, 0);
 
// переводим вектор гравитации в локальную СК
QVector3D gravity(0, 0, -1);
QVector3D local = m.mapVector(gravity);
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Март 19, 2021, 12:16 »

Цитата: Igors
Ну стало быть найти  вектор гравитации в СК прибора.

Агаа... Спасибо..

Вопросы:

1)

Цитировать
// матрица прибора, порядок вращений XYZ
QMatrix4 m;
m.rotate(angleZ, 0, 0, 1);
m.rotate(angleY, 0, 1, 0);
m.rotate(angleX, 1, 0, 0);

А надо ли мне делать это, если, к примеру, мой 3-д объект имеет Transform айтем?

Там уже есть как бы матрица 4x4.., то я могу взять ее?

2) Нужно ли нормализовать эту матрицу в диапазон 0-1 (типа чтобы потом делать m.mapVector()) ? Если да - то как?
Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Март 19, 2021, 13:32 »

А надо ли мне делать это, если, к примеру, мой 3-д объект имеет Transform айтем?

Там уже есть как бы матрица 4x4.., то я могу взять ее?
Можете если "объект соответствует прибору", т.е. матрица для того же базиса, и углы Эйлера применяются в том же порядке. Во всяком случае стоит попробовать

2) Нужно ли нормализовать эту матрицу в диапазон 0-1 (типа чтобы потом делать m.mapVector()) ? Если да - то как?
Если матрица имеет неодинаковые scale по осям - то нужно (иначе можно отделаться нормализацией выходного вектора). Не используйте метод с заманчивым названием normalMatrix, просто нормируйте первые 3 строки. Ну и неясно откуда эти масштабы берутся - у прибора ничего такого не видно. И стоит ли возиться если построить матрицу из углов = неск строк
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Март 19, 2021, 13:48 »

Агаа, спасибо большое! Вроде это работает. Респект и уважуха!  Улыбающийся

Но теперь вытекает следующий вопрос.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 23.