问题描述:
给你直角坐标系中的一个点,坐标原点指向该点形成矢径。
如果直角坐标系中有两个点,就会形成两个矢径。
能否编写一个程序,通过:
输入这两个点的坐标,把这两个矢径的夹角算出来?
我具体应该怎么写?
function t=cal(x1,y1,x2,y2)
if x1==0
if y1>0
t1=pi/2;
else
t1=pi*3/2;
end
else
if x1>0
t1=atan(y1/x1);
else
t1=atan(y1/x1)+pi;
end
end
if x2==0
if y2>0
t2=pi/2;
else
t2=pi*3/2;
end
else
if x2>0
t2=atan(y2/x2);
else
t2=atan(y2/x2)+pi;
end
end
t=t2-t1;
t=t*180/pi;
if t<0
t=t+360;
end
if t>360
t=t-360;
end
if t>180
t=360-180;
end
end
如果不考虑角度的方向,几行代码就够了
function angle=Angle(x1,y1,x2,y2)
if (x1==0 & y1==0)|(x2==0 & y2==0)
angle = 0
else
angle = acos(x1*x2+y1*y2)/sqrt(x1*x1+y1*y1)/sqrt(x2*x2+y2*y2)*180/pi
end
Angle(0,1,1,0)
这个容易哦,matlab有现成的代码
deg = @(p1,p2) acosd(p1*p2'/(norm(p1)*norm(p2))); % 计算夹角方程
p1 = [1,1]; % 矢径1(第一个点的坐标)
p2 = [-1,sqrt(3)]; %矢径2(第二个点的坐标)
deg(p1,p2) % 求出夹角
结果:
ans =
75
可见矢径p1和p2夹角是75度
这就是求两个矢量的夹角:
原点O[0,0,0]
OA=[1,1,0];
OB=[1,0,0];
sigma = acos(dot(OA,OB)/(norm(OA)norm(OB)));%弧度制
sigma/pi180%换算成角度
分别计算出两个点与x轴的夹角,然后求差值的绝对值即可