圆弧的定义:
圆心 (xc,yc)。
半径 r。
圆弧上的两点 P1(x1,y1) 和 P2(x2,y2)。
目标:
在圆弧上均匀取 n 个点(包括 P1 和 P2)。
1. 计算两点对应的角度
使用 atan2()
函数计算两点相对于圆心的角度:
θ1=atan2(y1−yc,x1−xc)
θ2=atan2(y2−yc,x2−xc)
将角度调整到 [0,2π)[0,2π) 范围
2 .计算圆弧的总角度
计算圆弧的总角度:
Δθ=θ2−θ1
如果 Δθ<0,则加上 2π 使其为正.
3.计算每个分段的角度
计算每个分段的角度:
δθ=Δθ/n−1
4.计算每个点的角度
计算每个点的角度:
θi=θ1+i⋅δθ,(i=0,1,2,…,n−1)
5.计算每个点的坐标
使用极坐标公式计算每个点的坐标:
xi=xc+r⋅cos(θi)
yi=yc+r⋅sin(θi)
#include <iostream>
#include <cmath>struct Point3D {double x, y, z;
};// 计算两点连线与 XY 平面的夹角(弧度制)
double calculate_angle_with_xy_plane(const Point3D& p1, const Point3D& p2) {// 计算连线向量double vx = p2.x - p1.x;double vy = p2.y - p1.y;double vz = p2.z - p1.z;// 计算连线向量的长度double v_length = std::sqrt(vx * vx + vy * vy + vz * vz);// 计算夹角double theta = std::asin(std::abs(vz) / v_length);return theta;
}int main() {Point3D p1 = {1, 2, 3}; // 点 P1Point3D p2 = {4, 5, 6}; // 点 P2double angle = calculate_angle_with_xy_plane(p1, p2);std::cout << "连线与 XY 平面的夹角(弧度制): " << angle << "\n";std::cout << "连线与 XY 平面的夹角(角度制): " << angle * 180 / M_PI << "°\n";return 0;
}