Plane
(正常,d)和Vector3
点(x,y,z)。我想出这个......
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);
}
如果有人认为这是错误或特别错误,请注意。
答案 0 :(得分: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)关键......
如果(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);