项目场景:
计算三维坐标组成的夹角
三维向量的夹角
参考:[三维向量夹角在线计算](https://www.23bei.com/tool/300.html)
公式:
三维向量夹角的计算公式如下:
假设两个三维向量分别为:a=(x1,y1,z1),b=(x2,y2,z2)。
向量a的模:|a|=√(x12+y12+z1^2)。
向量b的模:|b|=√(x22+y22+z2^2)。
两个向量的点乘:a·b=(x1x2+y1y2+z1z2)。
设两个向量的夹角为θ,则有:cosθ=(x1x2+y1y2+z1z2)/[√(x12+y12+z12)*√(x22+y22+z22)]。
上述公式均是以空间三维坐标给出的,如果令坐标中的z=0,则得到平面向量的计算公式。两个向量夹角θ的取值范围是:[0,π]。当夹角为锐角时,cosθ>0;当夹角为钝角时,cosθ<0。
三维点坐标类
public class Point {
public float x;
public float y;
public float z;
public Point (float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
}
}
计算公式文章来源:https://www.toymoban.com/news/detail-504204.html
/**
* 获取三维向量的夹角.
*
* @param center 夹角中心点
* @param start 起始点
* @param end 结束点
* @return 返回夹角
*/
public static float getTdAngle(Point center, Point start, Point end) {
// 向量1
float x1 = start.x - center.x, y1 = start.y - center.y, z1 = start.z - center.z;
// 向量2
float x2 = end.x - center.x, y2 = end.y - center.y, z2 = end.z - center.z;
System.out.println("x1/y1/z1=" + x1 + "/" + y1 + "/" + z1);
System.out.println("x2/y2/z2=" + x2 + "/" + y2 + "/" + z2);
// 向量的点乘
float vectorDot = x1*x2 + y1*y2 + z1*z2;
// 向量1的模
double vectorMold1 = Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2) + Math.pow(z1, 2));
// 向量2的模
double vectorMold2 = Math.sqrt(Math.pow(x2, 2) + Math.pow(y2, 2) + Math.pow(z2, 2));
// 向量的夹角[0, PI],当夹角为锐角时,cosθ>0;当夹角为钝角时,cosθ<0
double cosAngle = vectorDot / (vectorMold1 * vectorMold2);
double radian = Math.acos(cosAngle);
return (float) (180 / Math.PI * radian);
}
测试结果
文章来源地址https://www.toymoban.com/news/detail-504204.html
到了这里,关于三维向量的夹角的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!