선분의 교차점을 결정하는 방법 – MATLAB Chinese Forum
모두 지우기
clc
n=6
rp=rand(2,n);%임의의 n 포인트를 생성합니다. 여기서는 5개를 선택했습니다.
y=rp(2,:);
x=rp(1,:);
L=[]% line Matrix
h=1;% counter
m=0;% counter
er=1e-10% 비교 오류, 이에 대해서는 나중에 설명하겠습니다.
p>i=1:n-1의 경우
h=h+1;
l=h:n의 경우
m=m+ 1 ;
L(m,:)=[x(i) y(i) x(l) y(l)];% 모든 점을 선으로 연결합니다
X= [x(i) x(l)];
Y=[y(i) y(l)];
line(X,Y)% draw 모든 선
p>잠깐만
끝
끝
h=1;
si=size( L); p>
mark=zeros(1,si(1));%는 행렬을 교차점으로 표시하는 데 사용됩니다.
i=1:m-1
h =h+1;
l=h:m의 경우
x11=L(i,1);
y11=L(i, 2);
x12=L(i,3);
y12=L(i,4);
x21=L(l,1) ;
p>y21=L(l,2);
x22=L(l,3);
y22=L(l,4);% 두 개를 추출합니다. L 라인 매트릭스의 라인
a1=(y12-y11)/(x12-x11);%here y1=a1*x1+b1,y2=a2*x2+b2 , 두 라인을 나타냅니다. 선분 1에서 a1=(y12-y11)/(x12-x11), b1=y11-x11*a1
b1=y11-x11*a1;
a2=( y22-y21)/(x22-x21);% 선분 2에서, a2=(y22-y21)/(x22-x21), b2=y21-x21*a2;
b2=y21- x21*a2;
xc=(b2-b1)/(a1-a2);% 여기서 xc는 두 선분이 무한히 길 때 교차점의 x 값입니다. xc= (b2-b1 )/(a1-a2)
yc=a1*xc+b1;% 여기서 yc는 무한히 긴 두 선분의 교차점의 y 값입니다. yc=a1*xc +b1
if x11>x12% x11, x12, 즉 선분의 두 점을 크기에 따라 정렬
s=x11;
x11 = x12;
x12=s;
end
x21>x22%가 x21, x22, 즉 해당 선분에 따라 두 점을 선분에 놓으면 크기 정렬
s=x21;
x21=x22;
x22=s;
>
end
if xc-x11>er && x12-xc>er && xc-x21>er && x22-xc>er% xc의 크기를 x11, x12, x21과 비교하여 x22 이 무한선의 교차점이 선분에 있는지 확인하는 관계,
plot(xc,yc,'o')% xc가 동시에 두 개의 선분에 포함되면 다음과 같습니다. 점이 교차점입니다
유지
mark(i)=i;%i번째 선분은 교차점으로 표시됩니다
mark(l) =l;%l번째 선분이 표시되었습니다. 교차점이 있습니다
end
end
end
nm=0 ;
Lm=[];
for i=1:si(1)
mark(i);
if mark (i)==0%는 표시되지 않습니다. 즉 교차점이 없는 행렬이 없으며 이는 Lm 행렬에 기록되고 두꺼운 빨간색 선으로 표시됩니다.
nm=nm+1;
X=[L(i,1) L(i,3)];
Y=[L(i,2) L(i,4)];
line(X,Y,'color','red' ,'LineWidth',2)% 모든 선 그리기
보류
Lm(nm,:) =[L(i,1) L(i,2) L (i,3) L(i,4)];
끝
끝
colnames={'교차점이 없는 선분 끝점 1, x', '교차점이 없는 선분 끝점 1, y', '교차점이 없는 선분 끝점 2, x', '교차점이 없는 선분 끝점 2, y'};
t = uitable(Lm, colnames); %교차하지 않는 선분을 작성하려면 테이블을 사용하세요.
Lm