3D Math: рассчитать угол банка (рулон) от внешнего вида и вверх ортогональных векторов

StackOverflow https://stackoverflow.com/questions/3065070

  •  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 || Вверх |)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top