Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 Matlab中两个向量之间的角度

我有两点, a和b 。我需要计算它们之间的角度,因此我将它们视为矢量。但是向量a将始终定义为[0 0 0]。通过阅读MATLAB Newsreader的“ 两个向量之间的角度 ”,提供了三种解决方案:

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存在精度问题,因为theta接近零,但在三个方程中,只有acos提供了正确的解决方案。

我应该继续使用acos还是有更好的解决方案?



回答:

错误是设置a = [0 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



更多&回答...
poster 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 16:56


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.