Определить углы ориентации треугольника

Рейтинг: 2Ответов: 1Опубликовано: 24.10.2014

Здравствуйте!

Задал такой вопрос на форуме математики:

Не подскажете, как можно найти углы наклона плоскости, заданной тремя точками, к осям? Т.е. есть три точки (x1,y1,z1), b(x2,y2,z2), c(x3,y3,z3), не лежащие на одной прямой (треугольник). Необходимо найти углы, на которые надо повернуть плоскость (0XY- заданной например тремя точками (0,0,0),(1,0,0),(0,1,0)), чтобы она была параллельна заданному (abc).

Но, возможно, есть готовое решение в рамках OpenGL ES, android, java, renderscript?

Ответы

▲ 4Принят

Для начала нужно посчитать нормаль к плоскости:

n=[b-a,c-a]/|[b-a,c-a]|

Где [x,y] — векторное произведение, |v| — длина вектора.

У плоскости 0XY вектор нормали — (0,0,1), поэтому задача сводится к нахождению поворота, являющегося компизицией поворотов вокруг осей, при котором (0,0,1) перейдёт в n.

Очевидно, что это можно сделать в два поворота вокруг осей (сперва вокруг Y, потом — вокруг X). Для нахождения величин углов нужно спроецировать n сперва в плоскость 0XZ и найти угол между полученным вектором и (0,0,1):

AngleY = (n.x,0,n.z)^(0,0,1)

Где v^w означает угол между двумя векторами. После поворота вокруг оси Y аналогичным образом вычисляем насколько нужно повернуть вокруг оси Z:

AngleZ = (n.x,n.y,0)^(1,0,0)

Напоследок: для вычисления угла между двумя векторами полезно знать две формулы для скалярного произведения:

(v,w) = v.x*w.x + v.y*w.y + v.z*w.z
(v,w) = |v|*|w|/cos(v^w)