C# 将三角形旋转到Z=0
我想用XNA在三维空间的三角形上打个洞。 我想把这个问题转换成二维空间。 但是我不知道如何旋转所有点都是Z=0的三角形。 点1的坐标为X=0,Y=0,Z=0。 有人知道解决办法吗? LG 延斯C# 将三角形旋转到Z=0,c#,xna,rotation,geometry,C#,Xna,Rotation,Geometry,我想用XNA在三维空间的三角形上打个洞。 我想把这个问题转换成二维空间。 但是我不知道如何旋转所有点都是Z=0的三角形。 点1的坐标为X=0,Y=0,Z=0。 有人知道解决办法吗? LG 延斯 选择一个不在(0,0,0)的点。围绕y轴旋转形状,直到该点的z值为0 选择剩余的点。围绕X轴旋转形状,直到该点的z值为0 给定P1,P2,P3三角形的点 让我们注意一下: a=P2-P1 b=P3-P1 n=Vector3.叉积(a,b).归一化()->n是三角形的法线 三角形位于Z=0平面中,当且仅
给定
P1
,P2
,P3
三角形的点
让我们注意一下:
a=P2-P1
b=P3-P1
->n=Vector3.叉积(a,b).归一化()
是三角形的法线n
Z=0
平面中,当且仅当且仅当,n.Z=0
然后,只需使用:
->它是旋转的轴d=Vector3.CrossProduct(n,z).Normalized()
->这是旋转的角度angle=(float)System.Math.Acos(Vector3.DotProduct(n,z))
Vector3 a = P2 - P1;
Vector3 b = P3 - P1;
Vector3 n = Vector3.Cross(a, b);
n.Normalize();
Vector3 d = Vector3.Cross(n, Vector3.UnitZ);
d.Normalize();
float angle = (float)System.Math.Acos(Vector3.Dot(n, Vector3.UnitZ));
Vector3 newpoint2 = P1 + Vector3.Transform(a, Matrix.CreateFromAxisAngle(d, angle));
Vector3 newpoint3 = P1 + Vector3.Transform(b, Matrix.CreateFromAxisAngle(d, angle));
d=Vector3.叉积(n,z)->它是你旋转的轴。什么是z?向量3 P1=AVertex[Dreieck1.A];Vector3 P2=AVertex[Dreieck1.B];Vector3 P3=AVertex[Dreieck1.C];向量3a=P2-P1;向量3B=P3-P1;向量3 n1=向量3.交叉(a,b);向量3 n=向量3.归一化(n1);vector3d=Vector3.Cross(n,Vector3.UnitZ);双角度=System.Math.Acos(Vector3.Dot(n,Vector3.UnitZ));Vector3 newpoint=Vector3.Transform(P2,矩阵.CreateRotationX((浮动)角度));这样地?但是z不是0 z:/n您不使用d。Vector3 newpoint=Vector3.Transform(P2,矩阵。CreateFromAxisAngle(d,(浮点)angle*180/3.1415926535f))@Jens抱歉,我认为角度以度为单位,但以弧度为单位。我更新了我的帖子。但我的结果仍然不是0。我会试试,但我认为这不会有好的表现吗?@Jens这只是第一个想法。如果你找到了另一种更快的算法,那么一定要使用它。