Math Matlab中的矢量夹角
我有两点,Math Matlab中的矢量夹角,math,matlab,geometry,Math,Matlab,Geometry,我有两点,a和b。我需要计算它们之间的角度,所以我把它们当作向量。但是向量a将始终定义为[0]。阅读MATLAB新闻阅读器“”,提供了三种解决方案: x1 = 0; y1 = 0; z1 = 0; x2 = 0; y2 = 1; z2 = 0; a = [x1,y1,z1]; b= [x2,y2,z2]; theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b))) theta = rad2deg(acos(dot(a,b))) theta = rad2d
a
和b
。我需要计算它们之间的角度,所以我把它们当作向量。但是向量a
将始终定义为[0]。阅读MATLAB新闻阅读器“”,提供了三种解决方案:
x1 = 0;
y1 = 0;
z1 = 0;
x2 = 0;
y2 = 1;
z2 = 0;
a = [x1,y1,z1]; b= [x2,y2,z2];
theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b)))
theta = rad2deg(acos(dot(a,b)))
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2))
然而,由于acos
在θ接近零时存在精度问题,但在三个方程中,只有acos
提供了正确的解决方案
我应该继续使用acos
还是有更好的解决方案?a有大小和方向,而a
和b
只是空间中的坐标点。当您将a
和b
视为向量时,您隐式地将[0 0]
定义为这两个向量的原点。但是,由于点a
位于[0]
,因此它将是一个长度为零的向量
如果向量长度为零,它指向哪个方向?答案是无处可寻。它不指向任何方向,因此你无法找到它和另一个向量之间的角度
我想也许你对自己的问题定义得不好。您的坐标系的原点是否不是[0]
?你真的在试图找到由a和b构成的线与x-y平面之间的角度吗?a有大小和方向,而a和b只是空间中的坐标点。当您将a
和b
视为向量时,您隐式地将[0 0]
定义为这两个向量的原点。但是,由于点a
位于[0]
,因此它将是一个长度为零的向量
如果向量长度为零,它指向哪个方向?答案是无处可寻。它不指向任何方向,因此你无法找到它和另一个向量之间的角度
我想也许你对自己的问题定义得不好。您的坐标系的原点是否不是
[0]
?你真的想找出由a
和b
形成的线与x-y平面之间的角度吗?错误在于设置a=[0 0]
。关注点位于原点的中心,要计算相对于矢量b
的角度,需要指定点的移动方向。这可以通过设置a
为单位向量来实现
如果该点沿“x”方向移动,则x1=1
x1 = 1;
y1 = 0;
z1 = 0;
x2 = 0;
y2 = 1;
z2 = 0;
a = [x1,y1,z1]; b= [x2,y2,z2];
theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b)))
theta = rad2deg(acos(dot(a,b)))
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2))
theta =
90
theta =
90
theta =
90
问题解决了,忘记使用单位向量:p错误在于设置
a=[0]
。关注点位于原点的中心,要计算相对于矢量b
的角度,需要指定点的移动方向。这可以通过设置a
为单位向量来实现
如果该点沿“x”方向移动,则x1=1
x1 = 1;
y1 = 0;
z1 = 0;
x2 = 0;
y2 = 1;
z2 = 0;
a = [x1,y1,z1]; b= [x2,y2,z2];
theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b)))
theta = rad2deg(acos(dot(a,b)))
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2))
theta =
90
theta =
90
theta =
90
问题解决了,忘记使用单位向量:p两点之间的角度是多少?当一个向量为[0]时,两个向量之间的角度是多少?当一个向量为0时,求两个向量之间的角度意味着什么?你确定a不应该是[1]吗?此外,acos公式仅在向量为单位长度时有效,这至少对a是不正确的。两点之间的角度是多少?当一个向量为[0]时,两个向量之间的角度是多少?当一个向量为0时,求两个向量之间的角度意味着什么?你确定a不应该是[1]吗?此外,带有acos的公式仅在向量为单位长度时有效,这至少在a中是不正确的。