gpt4 book ai didi

c# - 到飞机的距离

转载 作者:太空狗 更新时间:2023-10-30 00:45:57 25 4
gpt4 key购买 nike

我编写了一个简单的小辅助方法,用于计算点到平面的距离。但是,它似乎返回了无意义的结果。因此,我创建飞机的代码是:

Plane = new Plane(vertices.First().Position, vertices.Skip(1).First().Position, vertices.Skip(2).First().Position);

很简单,我希望你会同意。它使用三个点创建 XNA 平面结构。

现在,在这之后我立即做:

foreach (var v in vertices)
{
float d = Math.Abs(v.ComputeDistance(Plane));
if (d > Constants.TOLERANCE)
throw new ArgumentException("all points in a polygon must share a common plane");
}

使用我用来构造平面的同一组顶点,我抛出了那个异常!从数学上讲这是不可能的,因为这三个点必须位于平面上。

我的 ComputeDistance 方法是:

public static float ComputeDistance(this Vector3 point, Plane plane)
{
float dot = Vector3.Dot(plane.Normal, point);
float value = dot - plane.D;
return value;
}

据我了解,这是正确的。那我做错了什么?还是我在 XNA 的实现中遇到了错误?

一些示例数据:

Points:
{X:0 Y:-0.5000001 Z:0.8660254}
{X:0.75 Y:-0.5000001 Z:-0.4330128}
{X:-0.75 Y:-0.5000001 Z:-0.4330126}

Plane created:
{Normal:{X:0 Y:0.9999999 Z:0} D:0.5} //I believe D should equal -0.5?

Distance from point 1 to plane:
1.0

最佳答案

看来您的Plane 已实现,因此D 不是您的其中一个点在平面法线上的投影,而是其负数。您可以将其视为将一个向量平面原点投影到法线上。

无论如何,我相信改变

float value = dot - plane.D;

float value = dot + plane.D;

应该解决问题。 HTH.

关于c# - 到飞机的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com