【问题标题】:Given 3 points, how do I calculate the normal vector?给定 3 点,我如何计算法线向量?
【发布时间】:2010-12-30 07:26:42
【问题描述】:

给定三个 3D 点(A、B 和 C),我如何计算法线向量?这三个点定义了一个平面,我想要垂直于这个平面的向量。

我可以获得演示此功能的示例 C# 代码吗?

【问题讨论】:

  • 数学与编程有很大关系。尤其是这个数学,如果你正在做任何 3D 的事情。
  • 让他休息一下,它被标记为 C# 和 .net-3.5。这是在您开始编程 3D 应用程序时立即出现的问题。看看相关的问题,我们通常允许这些东西。
  • 我的决定是:被问及的数学是否会在代码中实现。无论如何,这将继续存在。
  • @NoonSilk:StackOverflow 帖子被其他访问者阅读,可能是在它们写完之后很长时间(正如你在发表评论六年后我发现这个问题所看到的那样)。将应该关闭的问题保持在 closed 状态,将应该保持打开的问题保持在 open 状态只是常规策划的一部分,以保持未来一切整洁访问者。

标签: c# math .net-3.5 geometry


【解决方案1】:

这取决于点的顺序。如果从法线的方向看,这些点是按逆时针顺序指定的,那么计算起来很简单:

Dir = (B - A) x (C - A)
Norm = Dir / len(Dir)

其中x 是叉积。

如果您使用的是 OpenTK 或 XNA(可以访问 Vector3 类),那么只需:

class Triangle {
    Vector3 a, b, c;
    public Vector3 Normal {
        get {
            var dir = Vector3.Cross(b - a, c - a);
            var norm = Vector3.Normalize(dir);
            return norm;
        }
    }
}

【讨论】:

    【解决方案2】:

    你需要计算曲面上任意两个非平行向量的cross product。既然你有三个点,你可以通过取向量 AB 和 AC 的叉积来计算。

    当你这样做时,你正在计算一个surface normal,维基百科对此有相当广泛的解释。

    【讨论】:

      【解决方案3】:

      形成向量 BA 和 BC 的叉积。见http://mathworld.wolfram.com/CrossProduct.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 2021-04-18
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多