2016-11-09 3 views
-1

Извините заранее за недостаток знаний в этой области. У меня есть функция C++, который возвращает самолет, как четыре поплавков, например, так:Найдите углы поворота плоскости, данные ABCD

float plane[4]; // will contain the computed plane equation result

Если эти поплавки A,B,C,D, как я могу получить фактические углы плоскости (в градусах), а X, Y , Z?

Например, функция возвращают тестовые данные:

1, 0, 0, -341.336

Как следует вычислительным углы от этих данных?

Спасибо.

ответ

1

Коэффициенты A, B, C определяют нормальный вектор. Вы можете легко найти углы нормали с осями через функцию сухожилия. Пример для оси OX:

Len = Length(N) = Sqrt(A^2+B^2+C^2) 
Angle(N, OX) = ArcCos(DotProduct(N, OX)/Len) = 
       ArcCos(DotProduct(N, OX))/Len) = 
       ArcCos(DotProduct((A,B,C), (1,0,0)))/Len) = 
       ArcCos((A * 1 + B * 0 + C * 0)/Len) = 
       ArcCos(A/Len) 
for your example 
    Angle(N, OX) = ArcCos(1/1) = 0 (normal coincides with OX ort) 
    Angle(N, OY) = ArcCos(0/1) = Pi/2 
    Angle(N, OZ) = ArcCos(0/1) = Pi/2 
+0

Спасибо! Итак, abc - нормальный вектор, d - количество вращения? – anti

+1

Нет, d не имеет никакого отношения к вращению. Это можно рассматривать как расстояние от плоскости до координат начала координат (если нормали a, b, c) – MBo

+0

ОК, я думаю, я понимаю. Поэтому мне нужно взять нормальный вектор (A, B, C) и преобразовать его в углы. Я попытаюсь найти пример в C++. Спасибо за помощь. – anti