查看: 6382|回复: 10

两个向量的夹角,能否得到180-360区间值

[复制链接]

该用户从未签到

发表于 2012-7-21 10:44:56 | 显示全部楼层 |阅读模式
各位,两个单位向量的夹角通过 theta = acosf(A*B)算出,但是theta的返回值区间只能在【0-180】,当两个向量的夹角大于180度时,怎样得到介于【180-360】之间的theta值?  关键是如何判断两个向量的夹角大于180度时的临界状态?

该用户从未签到

发表于 2012-7-23 12:24:33 | 显示全部楼层
vec2 a(3, 10);
a.normalize();
vec2 b(10, 3);
b.normalize();
double angle = acos(a dot b);    (大概56°)
double cross = a cross b;    小于0
根据右手法则什么的
小于0时
{
  angle = -angle
  angle += 360
}
大致就是这样吧,根据叉积来判断旋转方向

该用户从未签到

发表于 2012-7-21 13:40:58 | 显示全部楼层
atan2可以。

该用户从未签到

发表于 2012-7-21 14:16:46 | 显示全部楼层
crossProduct

该用户从未签到

 楼主| 发表于 2012-7-23 10:58:25 | 显示全部楼层
smash 发表于 2012-7-21 13:40
atan2可以。

可否说的详细点?

该用户从未签到

 楼主| 发表于 2012-7-23 10:59:17 | 显示全部楼层
click 发表于 2012-7-21 14:16
crossProduct

使用叉积如何解决本问题?

该用户从未签到

 楼主| 发表于 2012-7-23 14:04:16 | 显示全部楼层
click 发表于 2012-7-23 12:24
vec2 a(3, 10);
a.normalize();
vec2 b(10, 3);

double cross = a cross b;
叉积返回的是向量,而不是double型

该用户从未签到

发表于 2012-7-24 09:08:38 | 显示全部楼层
那就点乘么

该用户从未签到

发表于 2012-7-25 09:45:51 | 显示全部楼层
需要一个额外的条件,就是这两个向量组成的平面的法线指向哪里,然后您计算叉积得到的axis与法线进行比较,反向则把atan2的结果加上180度即可

该用户从未签到

发表于 2012-7-25 20:41:55 | 显示全部楼层
两个向量夹角还可能大于180度????

该用户从未签到

发表于 2012-7-26 09:31:04 | 显示全部楼层
优弧还是劣弧而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表