Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将平面向X距离的点平移? 我得到了一个平面(法线,d)和一个向量3点(x,y,z) 我需要将平面平移到X距离的那个点。我该怎么做_C#_Xna_Translation_Plane - Fatal编程技术网

C# 如何将平面向X距离的点平移? 我得到了一个平面(法线,d)和一个向量3点(x,y,z) 我需要将平面平移到X距离的那个点。我该怎么做

C# 如何将平面向X距离的点平移? 我得到了一个平面(法线,d)和一个向量3点(x,y,z) 我需要将平面平移到X距离的那个点。我该怎么做,c#,xna,translation,plane,C#,Xna,Translation,Plane,我想到了这个 plane = Plane.Transform(plane, Matrix.CreateTranslation( 但我不知道该放什么。它必须是点积,Plane.Normal和myVector3的东西 编辑: 我在想这个 public static Plane MoveTo(this Plane p, Vector3 point, float distance) { Vector3 planeVector = p.Normal * p.D; Matrix matr

我想到了这个

plane = Plane.Transform(plane, Matrix.CreateTranslation(
但我不知道该放什么。它必须是点积,
Plane.Normal
和my
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);
}

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

从点p到平面Pi的距离为:

您应该计算当前d(p,pi),减去该值X,然后只需计算d即可得到新平面

编辑:

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

如果(R==0),则点包含在平面中
如果(R>0),则该点为前//或后

如果(RHave you check MSDN?@hamad No,我没有,但我使用相同的方法。我只需要一种方法。它对你有用吗?创建一个新的矩阵并将其传递到平面。Transform()@hamad我不知道传递到矩阵创建方法的参数是什么。顺便说一句,我已经有点到平面的距离(通过点积).我需要一个
矢量3
-转换器。我可以用于平面矩阵转换的值。只需..从D中减去或加上?如果初始距离D(P,pi)为100,并且您要向该点转换10个单位,新距离将为100-10=90…那么您只需计算“D”,就知道D(P,pi)==90。那么如何检测它是朝着还是朝后?请看我的编辑,对吗?不要将平面向量减到点,应该是矩阵矩阵=矩阵。CreateTransformation(Vector3.Normalize(planevector))*距离*数学。符号(Vector3.Dot(planevector,point)),我还没有测试它,但我认为需要对符号求反,(…*-数学符号(…)
 // This line has no sense... is useless do that.
 Vector3 planeVector = p.Normal * p.D;  
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);