Red de conocimiento informático - Material del sitio web - Cómo determinar la intersección de segmentos de línea – Foro chino de MATLAB

Cómo determinar la intersección de segmentos de línea – Foro chino de MATLAB

borrar todo

clc

n=6

rp=rand(2,n);%Generar n puntos aleatorios, El 5 seleccionados aquí

y=rp(2,:);

x=rp(1,:);

L=[]% línea Matriz

h=1;% contador

m=0;% contador

er=1e-10% de error de comparación, que se explicará más adelante

para i=1:n-1

h=h+1;

para l= h:n

m=m+ 1 ;

L(m,:)=[x(i) y(i) x(l) y(l)];% Conecta todos los puntos con rectas

X= [x(i) x(l)];

Y=[y(i) y(l)];

line(X,Y)% dibujar todas las líneas

espera

fin

fin

h=1;

si=size( L);

mark=zeros(1,si(1));% se utiliza para marcar la matriz con puntos de intersección

para i=1:m-1

h =h+1;

para l=h:m

x11=L(i,1);

y11=L(i, 2);

x12=L(i,3);

y12=L(i,4);

x21=L(l,1) ;

y21=L(l,2);

x22=L(l,3);

y22=L(l,4);% Extrae los dos líneas de la matriz de líneas L

a1=(y12-y11)/(x12-x11);%aquí y1=a1*x1+b1,y2=a2*x2+b2, para representar dos líneas, en el segmento de recta 1 a1=(y12-y11)/(x12-x11), b1=y11-x11*a1

b1=y11-x11*a1;

a2=( y22-y21)/(x22-x21);% En el segmento 2, a2=(y22-y21)/(x22-x21), b2=y21-x21*a2;

b2=y21- x21*a2;

xc=(b2-b1)/(a1-a2);% Aquí xc es el valor x del punto de intersección cuando dos segmentos de línea son infinitamente largos, xc= (b2-b1 )/(a1-a2)

yc=a1*xc+b1;% Aquí yc es el valor y del punto de intersección de dos segmentos de recta si son infinitamente largos, yc=a1*xc +b1

if x11>x12% Ordena x11, x12, es decir, los dos puntos de un segmento de recta según su tamaño

s=x11;

x11 = x12;

x12=s;

final

si x21>x22% ponga x21, x22, es decir, dos puntos en un segmento de recta según sus tamaño Ordenar

s=x21;

x21=x22;

x22=s;

>

end

if xc-x11>er && x12-xc>er && xc-x21>er && x22-xc>er% comparando el tamaño de xc con x11, x12, x21, x22 Relación para determinar si la intersección de esta línea infinita está en un segmento de línea,

plot(xc,yc,'o')% Si xc se incluye en dos segmentos de línea al mismo tiempo, entonces esto el punto es la intersección

mantenga presionado

mark(i)=i;%El i-ésimo segmento de línea está marcado con una intersección

mark(l) =l;%El l-ésimo segmento de línea está marcado Hay una intersección

end

end

end

nm=0 ;

Lm=[];

for i=1:si(1)

marca(i);

si marca (i) == 0% no se marcará, es decir, no hay una matriz sin puntos de intersección, que se registra en la matriz Lm y se muestra con una línea roja gruesa

nm=nm+1;

X=[L(i,1) L(i,3)];

Y=[L(i,2) L(i,4)];

line(X,Y,'color','red' ,'LineWidth',2)% dibuja todas las líneas

espera

Lm(nm,:) =[L(i,1) L(i,2) L (i,3) L(i,4)];

fin

fin

colnames={'Punto final del segmento de línea 1 sin intersección, x', 'Punto final del segmento de línea 1 sin intersección, y', 'Punto final del segmento de línea 2 sin intersección, x', 'Punto final del segmento de línea 2 sin intersección, y'};

t = uitable(Lm, colnames); %Utilice una tabla para escribir los segmentos de línea que no se cruzan

Lm