[英]computing angle between two 3d vectors - how to implement
我想计算两个3d向量之间的角度。 我正在使用以下方程式(方程式的来源 )来实现这一目标:
diffangle = atan2(norm(cross(v1,v2)),dot(v1,v2))
v1和v2的分量在数据类型float中给出,但是由于我的角度很小,所以我希望在double类型中具有差角。 我的实际实现如下所示:
double angle(float x1, float y1, float z1, float x2, float y2, float z2)
{
double dot = x1*x2 + y1*y2 + z1*z2;
double crossX = y1*z2-z1*y2;
double crossY = z1*x2-x1*z2;
double crossZ = x1*y2-y1*x2;
double norm = sqrt(crossX*crossX+crossY*crossY+crossZ*crossZ);
return (atan2(norm,dot)/M_PI*180);
}
我的实现应该是应该做的还是必须做些事情或考虑其他事项?
谢谢你的帮助。
关于精度问题:在C(和C ++)中,浮点数将在计算中加倍时提升为两倍(从int提升为long int也是一样)。
所以表达
double z = x*y;
首先以单精度( float
)计算x*y
,然后将结果转换为double
。 要实际使用双精度执行计算,您需要转换表达式中涉及的元素之一:
double z = (double)x*y;
但是,最简单的解决方案是将函数声明更改为接受double
。 这样,将在调用函数时提升float
值,并且所有计算都将使用双精度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.