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 intersection12 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:n26 pbar=p(i,:);27 pbar=reshape(pbar,[2,2]);28 line(pbar(1,:),pbar(2,:));29 end30 31 hold on;32 for i=1:n-133 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:n37 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 end50 end51 end52 end