很簡單的演算法,這裡是把每對線段都進行比較了。
還有一種似乎先通過x和y排序再進行交點判斷的,不過那種方法我還沒看太明白。
這裡的方法如下:
1.根據線段的端點求兩條直線的交點。
2.判斷直線的交點是否在兩條線段上。
結果如下:
matlab程式碼如下:
clear all;close all;clc; n=20; p=rand(n,4); %(x1,y1,x2,y2)線段兩端點 for i=1:n pbar=p(i,:); pbar=reshape(pbar,[2,2]); line(pbar(1,:),pbar(2,:)); end hold on; for i=1:n-1 p1=p(i,:); k1=(p1(2)-p1(4))/(p1(1)-p1(3)); b1=p1(2)-k1*p1(1); for j=i+1:n p2=p(j,:); k2=(p2(2)-p2(4))/(p2(1)-p2(3)); b2=p2(2)-k2*p2(1); x=-(b1-b2)/(k1-k2); %求兩直線交點 y=-(-b2*k1+b1*k2)/(k1-k2); %判斷交點是否在兩線段上 if min(p1(1),p1(3))<=x && x<=max(p1(1),p1(3)) && ... min(p1(2),p1(4))<=y && y<=max(p1(2),p1(4)) && ... min(p2(1),p2(3))<=x && x<=max(p2(1),p2(3)) && ... min(p2(2),p2(4))<=y && y<=max(p2(2),p2(4)) plot(x,y,'.'); end end end