Math 在正交基中将三维三角形转换为二维

Math 在正交基中将三维三角形转换为二维,math,geometry,projection,normalize,Math,Geometry,Projection,Normalize,我有一个函数可以进行这种转换。但我不知道它做得怎么样。有人能解释一下并确认它是正确的吗 /** *\brief计算三角形顶点的坐标 *在三角形平面的局部二维正交基中。 *\param[in]p0、p1、p2的顶点的三维坐标 *三角形 *\param[out]z0、z1、z2的顶点的二维坐标 *三角形 */ 静态空心三角形( 常数vec3和p0, const vec3和p1, const vec3和p2, vec2和z0, vec2和z1, vec2&z2 ) { vec3x=p1-p0; X.n

我有一个函数可以进行这种转换。但我不知道它做得怎么样。有人能解释一下并确认它是正确的吗

/**
*\brief计算三角形顶点的坐标
*在三角形平面的局部二维正交基中。
*\param[in]p0、p1、p2的顶点的三维坐标
*三角形
*\param[out]z0、z1、z2的顶点的二维坐标
*三角形
*/
静态空心三角形(
常数vec3和p0,
const vec3和p1,
const vec3和p2,
vec2和z0,
vec2和z1,
vec2&z2
) {
vec3x=p1-p0;
X.normalize();//通过将X,y,z除以向量的长度进行规格化
vec3z=交叉(X,(p2-p0));
Z.规范化();
vec3y=cross(Z,X);//叉积
常数vec3&O=p0;
双x0=0;
双y0=0;
双x1=(p1-O).length();
双y1=0;
双x2=点((p2-O),X);
双y2=点((p2-O),Y);
z0=vec2(x0,y0);
z1=vec2(x1,y1);
z2=vec2(x2,y2);
}

向量X,Y,Z构成正交基,其中X与p0-p1重合,Y位于三角形平面,Z垂直于该平面


然后p0映射到2D平面上的坐标原点,p1映射到OX轴上,然后通过p0-p2向量在X和Y基向量上的投影计算p2坐标。

vec3 Z=cross(X,(p2-p0));这里(p2-p0)在做叉积之前不应该被归一化吗?@Tahlil:你知道
X
在代码的这个地方有单位长度,但是你不知道向量
X
p2-p0
是垂直的。因此,即使您规范化了
p2-p0
,您也不知道叉积是否具有单位长度(而且可能不会)。所以,在取叉积之后进行归一化是最简单、最快的,就像代码一样。你知道多少3D几何和向量代数?例如,您了解标准化、交叉积和点积吗?