• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MATLAB—求直线或者线段之间的交点坐标

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 1 function  CrossPoint(  )
 2 %% 求两条直线的交点坐标
 3 x1  = [7.8 8];
 4 y1  = [0.96 0.94];
 5 %line2
 6 x2 = [8.25 8.25];
 7 y2 = [0 0.99];
 8 %fit linear polynomial
 9 p1 = polyfit(x1,y1,1);
10 p2 = polyfit(x2,y2,1);
11 %calculate intersection
12 x_intersect = fzero(@(x) polyval(p1-p2,x),3);
13 y_intersect = polyval(p1,x_intersect);
14 line(x1,y1);
15 hold on;
16 line(x2,y2);
17 plot(x_intersect,y_intersect,'r*')
18 axis([5,10,0,2]);
19 
20 
21 %% 求线段的交点坐标
22 n=20;
23 p=rand(n,4);        %(x1,y1,x2,y2)线段两端点
24 
25 for i=1:n
26     pbar=p(i,:);
27     pbar=reshape(pbar,[2,2]);
28     line(pbar(1,:),pbar(2,:));
29 end
30 
31 hold on;
32 for i=1:n-1
33     p1=p(i,:); 
34     k1=(p1(2)-p1(4))/(p1(1)-p1(3));
35     b1=p1(2)-k1*p1(1);
36     for j=i+1:n
37         p2=p(j,:);
38         k2=(p2(2)-p2(4))/(p2(1)-p2(3));
39         b2=p2(2)-k2*p2(1);
40        
41         x=-(b1-b2)/(k1-k2);             %求两直线交点
42         y=-(-b2*k1+b1*k2)/(k1-k2);
43                                         %判断交点是否在两线段上
44         if min(p1(1),p1(3))<=x && x<=max(p1(1),p1(3)) && ...
45            min(p1(2),p1(4))<=y && y<=max(p1(2),p1(4)) && ...
46            min(p2(1),p2(3))<=x && x<=max(p2(1),p2(3)) && ...
47            min(p2(2),p2(4))<=y && y<=max(p2(2),p2(4))    
48             plot(x,y,'r.');
49         end
50     end
51 end
52 end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap