探讨空间向量夹角

发布时间:2023-05-21

一、定义与计算

空间向量夹角,是指两个向量之间的角度。在三维空间中,一个向量可以用三个分量表示(三元组),两个向量分别为a(a1, a2, a3)和b(b1, b2, b3),则它们的夹角公式如下:

double cos_theta = (a1*b1+a2*b2+a3*b3)/(sqrt(a1*a1+a2*a2+a3*a3)*sqrt(b1*b1+b2*b2+b3*b3));
double theta = acos(cos_theta);

其中,acos是反余弦函数,返回的角度范围在0到π之间。 为了避免精度问题,代码中应当注意将除数平方根化简后再进行计算,例如:

double norm_a = sqrt(a1*a1+a2*a2+a3*a3);
double norm_b = sqrt(b1*b1+b2*b2+b3*b3);
double cos_theta = (a1*b1+a2*b2+a3*b3)/(norm_a*norm_b);
double theta = acos(cos_theta);

二、向量投影

在计算夹角之前,需要求出两个向量在同一方向上的投影。为此,我们可以先将两个向量单位化,然后相乘即可得到其投影。 代码示例:

double norm_a = sqrt(a1*a1+a2*a2+a3*a3);
double norm_b = sqrt(b1*b1+b2*b2+b3*b3);
double a_unit[3] = {a1/norm_a, a2/norm_a, a3/norm_a};
double b_unit[3] = {b1/norm_b, b2/norm_b, b3/norm_b};
double projection = a_unit[0]*b_unit[0] + a_unit[1]*b_unit[1] + a_unit[2]*b_unit[2];

三、向量叉积

向量夹角的定义还可以通过向量叉积得到。向量叉积是一个运算符,其结果为一个向量,其大小等于两个向量所围成的平行四边形的面积,方向垂直于这个平行四边形。 两个向量a和b的叉积写作a×b,其公式如下:

c1 = a2*b3 - a3*b2;
c2 = a3*b1 - a1*b3;
c3 = a1*b2 - a2*b1;

代码示例:

double c1 = a2*b3 - a3*b2;
double c2 = a3*b1 - a1*b3;
double c3 = a1*b2 - a2*b1;

四、应用举例

空间向量夹角的应用非常广泛,例如,可以用于计算两个物体运动方向之间的夹角,以及三维建模中表面法向量之间的夹角,也可以用于机器人定位中计算机器人与目标物体之间的夹角。 代码示例:计算点到平面的距离

double point[3] = {1, 2, 3};
double plane[4] = {1, 2, 3, 4};
// 点到平面的距离公式为:|ax+by+cz+d|/sqrt(a^2+b^2+c^2)
double distance = abs(plane[0]*point[0]+plane[1]*point[1]+plane[2]*point[2]+plane[3])/sqrt(plane[0]*plane[0]+plane[1]*plane[1]+plane[2]*plane[2]);