【问题标题】:Find the rotation angles of a plane, given ABCD给定 ABCD,求平面的旋转角度
【发布时间】:2016-11-09 14:22:49
【问题描述】:

对于我缺乏这方面的知识,请提前道歉。我有一个 c++ 函数,它返回一个平面,作为四个浮点数,如下所示:

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

如果这些浮点数是A,B,C,D,我怎样才能得到平面的实际角度(以度为单位)为 X、Y、Z?

例如带有测试数据的函数返回:

1, 0, 0, -341.336

我应该如何根据这些数据计算角度?

谢谢。

【问题讨论】:

    标签: c++ math 3d plane


    【解决方案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
    

    【讨论】:

    • 谢谢!那么abc是法向量,d是旋转量吗?
    • 不,d 与旋转无关。它可能被认为是从平面到坐标原点的距离(如果 a,b,c 归一化)
    • 好的,我想我明白了。所以我需要的是取一个法线向量(A,B,C)并将其转换为角度。我将尝试在 C++ 中找到一个示例。感谢您的帮助。
    • 是的。请注意,对于归一化(单位)法线向量 A、B、C 是“方向余弦”
    • 对不起,我卡住了。在上面的代码中,Angle(N, OY) = ArcCos(0/1) = Pi/2 为什么是两个=?我如何在 C++ 中做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2021-02-14
    • 1970-01-01
    • 2020-10-02
    • 2011-01-06
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多