3D Math: рассчитать угол банка (рулон) от внешнего вида и вверх ортогональных векторов
-
28-09-2019 - |
Вопрос
Я надеюсь, что это правильное место, чтобы задать этот вопрос, который является так же, как этот, но выражается как чистая математика, а не графически (по крайней мере, я надеюсь, что перевел проблему в математику правильно).
Учитывая:
- Две векторы, которые являются ортогональными: UP (UX, UY, UZ) и посмотрите (LX, LY, LZ)
- самолет P, которая перпендикулярна посмотреть (следовательно, в том числе вверх)
- Y1, который является проекцией Y (вертикальная ось) вдоль посмотреть на P
Вопрос: Какова ценность угла между y1 и вверх?
Поскольку математики согласятся, это очень простой вопрос, но я почесал голову как минимум на две недели без возможности визуализировать, как проецировать Y на P ... Может быть, теперь слишком старым для поиска решений школьных упражнений.
Я ищу тригонометрический раствор, а не раствор с использованием матрицы. Спасибо.
Редактировать: Я обнаружил, что мне нужно было определить знак угла, относительно оси вращения, которая должна была посмотреть. Я разместил последний код на моем связанном вопросе (см. Ссылка выше). Благодаря тем, кто помог. Я ценю ваше время.
Решение
Я просто делаю это на бумаге. Я надеюсь, что это правильно.
Давайте придумаем и посмотрим нормализуются, то есть длина 1. Допустим, что плоскость p содержит начало происхождения, а L - это нормальное. Y есть (0, 1, 0)
Проектировать Y на P, найдите его расстояние до ...
d = Y dot L = ly
... а затем масштабируйте нормальный на -D, чтобы получить Y1 (то есть проекция Y на P)
Y1 = (lx * ly, ly * ly, lz * ly)
Теперь нормализовать Y1, то есть масштабируется через (1 / длина). Если его длина была 0, то вам повезло.
Точечный продукт Y1 и UP = косинус угол. Так
angle = acos(Y1 dot Up)
Другие советы
- Две векторы, которые являются ортогональными: UP (UX, UY, UZ) и посмотрите (LX, LY, LZ)
- самолет P, которая перпендикулярна посмотреть (следовательно, в том числе вверх)
- Y1, который является проекцией Y (вертикальная ось) вдоль посмотреть на P
Я придумаю и посмотрю единичные векторы. Пусть y = (0,1,0).
Давайте найдем Y1.
Y1 = y - (y * look) * посмотрите y1 = y - ly * посмотрите y1 = (-lyЛХ, 1 - л---ly * lz)
Обратите внимание, что Y1 будет (0,0,0), когда выглядит (0,1,0) или (0, -1,0).
Как сказал Дитмар, найдите угол между y1 и вверх путем нормализации Y1 и нахождение ARCCOS y1 * up (где * это точечный продукт)
Это относительно простая проблема с использованием вектора математики. Использовать Уравнение для векторной проекции чтобы получить Y1, то Тригонометрическое уравнение для точечного продукта Чтобы получить угол между y1 и вверх.
Это уравнения было бы довольно легко реализовать себя практически в любом языке, но если вы задаете этот вопрос, вы можете намереваться сделать более тяжелую вектору математики, в этом случае я бы предложил попытаться найти третий -партийная библиотека.
Вам нужно знать о векторах в трехмерном пространстве. Я думаю, что фундаментальное понимание тех, особенно точечных и перекрестных продуктов, разобраться. Ищите учебник начального векторов.
Две векторы, которые являются ортогональными: UP (UX, UY, UZ) и посмотрите (LX, LY, LZ)
Ортогональные векторы имеют продукт нулевого точка.
самолет P, которая перпендикулярна посмотреть (следовательно, в том числе вверх)
Если вы возьмете перекрестный продукт посмотрите на вверх, вы получите третий вектор, наряду наряду, определяют самолет, перпендикулярную посмотреть.
Y1, который является проекцией Y (вертикальная ось) вдоль посмотреть на P
Я не знаю, что вы здесь получаете, но точечный продукт любого вектора с видом дает вам величину его компонента в направлении внешнего вида.
Если y = (0,1,0), то
Y1 = (-lyЛХ, 1 - л---ly * lz)
| Y1 |. = SQRT (Y1X ^ 2 + Y1Y ^ 2 + Y1Z ^ 2)
| Вверх | = SQRT (UPX ^ 2 + UPY ^ 2 + UPZ ^ 2)
Угол банков = (y1xUPX + Y1Y.Upy + Y1Z.UPZ) / (| y1 || Вверх |)