已知三个点,用matlab如何求两条直线的夹角
答案:3 悬赏:20 手机版
解决时间 2021-12-26 11:03
- 提问者网友:人生佛魔见
- 2021-12-25 19:39
已知三个点(x1,y1),(x2,y2),(x3,y3),连接(x1,y1),(x2,y2)得到一条直线,连接(x2,y2),(x3,y3)得到第二条直线,如何用matlab求这两条直线的夹角,请给出程序,用matlab哦,求高手帮助
最佳答案
- 五星知识达人网友:不甚了了
- 2022-01-10 01:59
function a=JiaJiao(x,y)
% 求两条直线夹角
% x,y 是已知三点的横坐标和纵坐标
% eg: x=[1 2 3];y=[4 1 5];
if x(2)~=x(1)
k1=(y(2)-y(1))/(x(2)-x(1));
end
if x(3)~=x(2)
k2=(y(3)-y(2))/(x(3)-x(2));
end
if x(2)==x(1) & x(3)==x(2)
a=0;
elseif x(3)==x(2)
a=pi/2-atan(abs(k1));
elseif x(1)==x(2)
a=pi/2-atan(abs(k2));
elseif 1+k1*k2==0
a=pi/2;
else
a=atan(abs((k2-k1)/(1+k2*k1))); % 夹角
end
a=a*360/(2*pi); % 转化为角度制
% 求两条直线夹角
% x,y 是已知三点的横坐标和纵坐标
% eg: x=[1 2 3];y=[4 1 5];
if x(2)~=x(1)
k1=(y(2)-y(1))/(x(2)-x(1));
end
if x(3)~=x(2)
k2=(y(3)-y(2))/(x(3)-x(2));
end
if x(2)==x(1) & x(3)==x(2)
a=0;
elseif x(3)==x(2)
a=pi/2-atan(abs(k1));
elseif x(1)==x(2)
a=pi/2-atan(abs(k2));
elseif 1+k1*k2==0
a=pi/2;
else
a=atan(abs((k2-k1)/(1+k2*k1))); % 夹角
end
a=a*360/(2*pi); % 转化为角度制
全部回答
- 1楼网友:長槍戰八方
- 2022-01-10 03:28
% theta=acosd(dot([x1-x2,y1-y2],[x3-x2,y3-y2])/(norm([x1-x2,y1-y2])*norm([x1-x2,y3-y2])))
theta=acosd(dot([2-3,5-2],[7-3,4-2])/(norm([2-3,5-2])*norm([7-3,4-2])))
- 2楼网友:拜訪者
- 2022-01-10 02:07
用一下的三角公式求解:
cosA=(c^2+b^2-a^2)/2bc
cosB=(c^2+a^2-b^2)/2ac
cosC=(a^2+b^2-c^2)/2ab
程序如下:
a=norm([x1-x3,y1-y3]);
b=norm([x2-x3,y2-y3]);
c=norm([x1-x2,y1-y2]);
alpha=acos((b^2+c^2-a^2)/(2*b*c));
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯