繁体   English   中英

计算两个3d向量之间的角度-如何实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM