给定三个点计算夹角C++实现

double angleBetweenPoints(const Point& A, const Point& B, const Point& C) {
//计算向量A->B和->CB ∠ABC
double vecAB_x = A.x - B.x;
double vecAB_y = A.y - B.y;
double vecCB_x = C.x - B.x;
double vecCB_y = C.y - B.y;
/*
// 计算向量A->C和B->C ∠ACB
double vecAC_x = A.x - C.x;
double vecAC_y = A.y - C.y;
double vecBC_x = B.x - C.x;
double vecBC_y = B.y - C.y;
*/

// 计算向量AB和CB的点积
double dotProduct = vecAB_x * vecCB_x + vecAB_y * vecCB_y;

// 计算向量AB和CB的长度
double lengthAC = std::sqrt(vecAB_x * vecAB_x + vecAB_y * vecAB_y);
double lengthBC = std::sqrt(vecCB_x * vecCB_x + vecCB_y * vecCB_y);

// 计算夹角cos(θ)
double cosTheta = dotProduct / (lengthAC * lengthBC);

// 使用反余弦函数acos计算夹角θ
double angle = std::acos(cosTheta);

// 将弧度转换为度
angle = angle * 180.0 / M_PI;

return angle;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值