c++计算空间向量的夹角

在这里插入图片描述
在这里插入图片描述

代码

void UtilsClass::normalization(double unnorm_array[3])
{
	// 归一化
	double max_val = std::max(abs(unnorm_array[0]), abs(unnorm_array[1]));
	max_val = std::max(max_val, abs(unnorm_array[2]));
	// std::cout << "max_val = " << max_val << std::endl;
	unnorm_array[0] = unnorm_array[0] / max_val;
	unnorm_array[1] = unnorm_array[1] / max_val;
	unnorm_array[2] = unnorm_array[2] / max_val;
	//std::cout << ba[0] << ", " << ba[1] << ", " << ba[2] << std::endl;
}
void UtilsClass::CalculateAngle(
	const Eigen::Vector4i& coordinate01, 
	const Eigen::Vector4i& coordinate02, 
	const Eigen::Vector4i& coordinate03, 
	double& angle_pi)
{
	// 02->01向量
	double ba[3] = { coordinate01(0) - coordinate02(0),
					coordinate01(1) - coordinate02(1),
					coordinate01(2) - coordinate02(2) };
	this->normalization(ba);
	// std::cout << ba[0] << ", " << ba[1] << ", " << ba[2] << std::endl;
	
	// 02->03向量
	double bc[3] = { coordinate03(0) - coordinate02(0),
					coordinate03(1) - coordinate02(1),
					coordinate03(2) - coordinate02(2) };
	this->normalization(bc);
	// std::cout << bc[0] << ", " << bc[1] << ", " << bc[2] << std::endl;

	// 空间向量夹角公式
	double amb = ba[0] * bc[0] + ba[1] * bc[1] + ba[2] * bc[2];
	double sqa = sqrt(pow(ba[0], 2) + pow(ba[1], 2) + pow(ba[2], 2));
	double sqb = sqrt(pow(bc[0], 2) + pow(bc[1], 2) + pow(bc[2], 2));
	double cos_theta = amb / (sqa * sqb);
	
	angle_pi = acos(cos_theta);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值