关于求法向量的问题(急) 有三个顶点的坐标(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),以逆时针方向围成一个三角形面片,我想根据右手法则求出这个面片的向量的方向,请问这么求?是不是要用到向量的叉乘?叉乘又是怎么实现的?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CalculateNormal(float* fVertex1,float* fVertex2,float* fVertex3,float* fNormal){ float fVector1[3],fVector2[3]; fVector1[0] = fVertex2[0] - fVertex1[0]; fVector1[1] = fVertex2[1] - fVertex1[1]; fVector1[2] = fVertex2[2] - fVertex1[2]; fVector2[0] = fVertex3[0] - fVertex1[0]; fVector2[1] = fVertex3[1] - fVertex1[1]; fVector2[2] = fVertex3[2] - fVertex1[2]; fNormal[0] = fVector1[1] * fVector2[2] - fVector1[2] * fVector2[1]; fNormal[1] = fVector1[2] * fVector2[0] - fVector1[0] * fVector2[2]; fNormal[2] = fVector1[0] * fVector2[1] - fVector1[1] * fVector2[0]; float dLength = sqrt(fNormal[0] * fNormal[0] + fNormal[1] * fNormal[1] + fNormal[2] * fNormal[2]); if (dLength != 0.0) { fNormal[0] /= dLength; fNormal[1] /= dLength; fNormal[2] /= dLength; } else { fNormal[0] = 0.0; fNormal[1] = 0.0; fNormal[2] = 0.0; }} 法向量是两个边向量的叉乘结果所以,第一步是 p2-p1, 和p3-p1的操作,形成两个边向量关于叉乘,假定i,j,k是三个轴,那么V1(x1,y1,z1)和V2(x2,y2,z2)的叉乘结果表示为行列式的方式:| x1 y1 z1 || x2 y2 z2 | = V(y1*z2-y2*z1, z1*x2-x1*z2, x1*y2-x2*y1)| i j k |注意: V1×V2 = - V2×V1左手和右手的区别就是谁在先谁在后最后如果需要,就把V单位化即可 结构体中的结构体调用问题 我写的驱动,一在卸载时一调用IoDeleteDevice(pDevExt->pDevice)这句就蓝屏,希望高手指教,不慎感激! 请问蚂蚁爬绳子的问题? 各位高手救救小女子!!!在线等! “对象不支持该方法”!为什么啊? 有关切分窗口,请赐教!!! 用mfc如何创建一个非摸态对话框~? 关于mfc的一个小问题 请教一个 简单问题 ,谢谢 求助 mfc 连接操作 Adaptive Server Anywhere 数据库的问题 Windows又出新版本了!WindowsRG 请问用VC编译dll的时候怎么没有lib生成,只有dll
{
float fVector1[3],fVector2[3]; fVector1[0] = fVertex2[0] - fVertex1[0];
fVector1[1] = fVertex2[1] - fVertex1[1];
fVector1[2] = fVertex2[2] - fVertex1[2]; fVector2[0] = fVertex3[0] - fVertex1[0];
fVector2[1] = fVertex3[1] - fVertex1[1];
fVector2[2] = fVertex3[2] - fVertex1[2]; fNormal[0] = fVector1[1] * fVector2[2] - fVector1[2] * fVector2[1];
fNormal[1] = fVector1[2] * fVector2[0] - fVector1[0] * fVector2[2];
fNormal[2] = fVector1[0] * fVector2[1] - fVector1[1] * fVector2[0]; float dLength = sqrt(fNormal[0] * fNormal[0] + fNormal[1] * fNormal[1] + fNormal[2] * fNormal[2]); if (dLength != 0.0)
{
fNormal[0] /= dLength;
fNormal[1] /= dLength;
fNormal[2] /= dLength;
}
else
{
fNormal[0] = 0.0;
fNormal[1] = 0.0;
fNormal[2] = 0.0;
}
}
所以,第一步是 p2-p1, 和p3-p1的操作,形成两个边向量关于叉乘,假定i,j,k是三个轴,那么V1(x1,y1,z1)和V2(x2,y2,z2)的叉乘结果表示为行列式的方式:
| x1 y1 z1 |
| x2 y2 z2 | = V(y1*z2-y2*z1, z1*x2-x1*z2, x1*y2-x2*y1)
| i j k |
注意: V1×V2 = - V2×V1
左手和右手的区别就是谁在先谁在后最后如果需要,就把V单位化即可