C++:求两个二维向量或三维空间向量之间的夹角

求两向量间夹角

在工作中经常会遇到计算两个向量间夹角问题,由于水平有限,知识面浅,不知道有什么好用的函数可以直接调用,因此,总结以下两个计算夹角的代码,记录于此。

二维向量

template <typename DataType>
double getDegAngle2d(const DataType v1, const DataType v2)
{
	double theta = atan2(v2.y, v2.x) - atan2(v1.y, v1.x); //弧度
	if (theta > M_PI)
	{
		theta -= 2*M_PI;
	}
	if (theta < -M_PI)
	{
		theta += 2*M_PI;
	}
	return theta * 180/M_PI; //角度
}

三维向量

template <typename DataType> // Eigen::Vector3d
double getDegAngle3d(const DataType v1, const DataType v2)
{
	double radian = atan2(v1.cross(v2).norm(), v1.transpose() * v2); //弧度
	if (v1.cross(v2).z() < 0)
	{
		radian = 2*M_PI - radian;
	}

	return radian * 180/M_PI; //角度
}

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ywfwyht

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值