1
  • 我得到一个Plane(Normal, d) 和一个Vector3点 (x, y, z)。
  • 我需要将平面平移到 X 距离的那个点。我怎么做?

我想出这个..

plane = Plane.Transform(plane, Matrix.CreateTranslation(

但不知道该放什么。它必须与点积有关,Plane.Normal而我的Vector3.

编辑:

我在想这个。

public static Plane MoveTo(this Plane p, Vector3 point, float distance)
{
    Vector3 planeVector = p.Normal * p.D;

    Matrix matrix = Matrix.CreateTranslation(Vector3.Normalize(planeVector)) *
        distance * Math.Sign(Vector3.Dot(planeVector, point - planeVector))

    return Plane.Transform(p, matrix);
}

如果有人认为这是错误的或部分错误的,请注意。

4

1 回答 1

3

点 P 到平面 Pi 的距离为:

在此处输入图像描述

在此处输入图像描述

您应该计算当前 d(P, pi),减去 X 的数量,然后只需计算 D 即可获得新平面。

编辑:

 // This line has no sense... is useless do that.
 Vector3 planeVector = p.Normal * p.D;  

要知道点和平面之间的关系,您只需计算其方程: R = Ax + By + Cz + D 其中 (A,B,C) 是法线, (x,y,z) 是点。 ..

if (R == 0) 该点包含在平面中
if (R>0) 该点在前面 // 反之亦然
如果 (R<0) 该点在后面

R = plane.DotCoordinate(point);    
distance*=(R>0) ? 1 : -1; // or viceversa, i'm not sure now
Matrix matrix = Matrix.CreateTranslation(plane.Normal * distance);
return Plane.Transform(p, matrix);
于 2012-04-13T07:01:37.717 回答