关于MATLAB矢径问题

问题描述:
给你直角坐标系中的一个点,坐标原点指向该点形成矢径。
如果直角坐标系中有两个点,就会形成两个矢径。
能否编写一个程序,通过:
输入这两个点的坐标,把这两个矢径的夹角算出来?

我具体应该怎么写?

img

img

 
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轴的夹角,然后求差值的绝对值即可