如何将平面转换为X距离的点?

时间:2012-04-13 06:48:07

标签: c# xna translation plane

  • 我得到Plane(正常,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);
}

如果有人认为这是错误或特别错误,请注意。

1 个答案:

答案 0 :(得分:3)

从点P到平面Pi的距离是:

enter image description here

enter image description here

你应该计算当前的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)关键......

如果(R == 0)该点包含在平面中    如果(R> 0)该点在前面//或反之亦然    if(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);