Red de conocimiento de abogados - Derecho de sociedades - 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); Genera n puntos aleatorios, aquí 5 seleccionado

y=rp(2,:);

x=rp(1,:);

L=[]matriz de líneas

h=1; contador

m=0; contador

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

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) dibuja todas las líneas

espera

fin

fin

h=1;

si=tamaño(L); 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 dos líneas de la matriz de líneas L

a1); =(y12-y11)/(x12-x11); Aquí usamos y1=a1*x1 b1, y2=a2*x2 b2 para representar dos líneas en el segmento 1, a1=(y12- y11)/(x12-). x11), b1=y11-x11*a1

b1=y11-x11*a1;

a2=(y22-y21)/(x22-x21 ); , 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 los dos segmentos de línea son infinitamente largos, xc=(b2-b1)/(a1-a2)

yc= a1*xc b1; donde yc es el valor y del punto de intersección de dos segmentos de línea si son infinitamente largos, yc=a1*xc b1

si x11gt se convierte en x11, x12, es decir Dos; los puntos en un segmento de línea se ordenan por tamaño

s=x11

x11=x12

x12=s

fin;

si x21gt;

Orden pequeña

s=x21

x21=x22

x22=s

fin

; if xc-x11gt;er &x12-xcgt;er&xc-x21gt;er &x22-xcgt;er ¿Es el punto de intersección de líneas infinitas en un segmento de línea

? (xc, yc, 'o') Si xc está incluido en dos segmentos de línea al mismo tiempo, entonces este punto es el punto de intersección

mantén presionado

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

mark(l)=l El l-ésimo segmento de línea está marcado con un punto de intersección

end

fin

fin

nm=0;

Lm=[]; (1)

mark(i);

si mark(i)==0 no estará marcado, es decir, no habrá ninguna matriz sin intersección, registrada 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)];

dibujar línea(X, Y, 'color', 'rojo', 'LineWidth', 2) Todas las líneas

espera

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

end

end

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 sin intersección< / p>

Lm