
TRIANGULACIÓN DE POLINOMIO CONVEXO
Publicado por Daniel (1 intervención) el 28/11/2021 11:34:26
Buenos días a todos, soy muy novato con Matlab y debo realizar un ejercicio para clase que me está dando un poco de dolor de cabeza. Me gustaría que alguien pudiera echarme una mano.
El ejercicio trata de triangular un polígono convexo utilizando componentes monótonas (identificar orejas), para ello mi idea es recorrer el polígono en sentido antihorario, utilizar la ecuación de la recta cada 3 vértices e ir eliminando aquellos que queden fuera del polígono al hallar una diagonal. De este modo ir iterando n veces hasta que el polígono quede triangulado.
Hasta ahora he logrado que el programa lea el archivo txt y guarde una matriz ordenada de los datos del fichero, en este caso de 21x3
posteriormente intento con un bucle for aplicar la ecuación de la recta entre vertices impares para observar si el vertice par intermedio está a un lado u otro de la misma y con ello definir una diagonal o no. Aquí tengo problemas para calcular y extraer a una nueva matriz los valores calculados.
Mi idea es una vez tenga estos valores aplicar un bucle if para eliminar vértices ya triangulados.
No se si alguien pudiera decirme donde encontrar información sobre como realizar este ejercicio
Muchas gracias y un saludo!
CODIGO:
PRUEBA DE EVALUACIÓN DEL MÓDULO 1
%1.Identificación de vértices
clear;%Para borrar el workspace
clc;%Para borrar el comandWindow
%Lectura del fichero de puntos - puntos.txt
%coordenadas de los puntos de control (3columnas, nombre del punto, X, Y):
ficherocon = fopen ('puntos.txt','r');%apertura del fichero que vamos a leer
A = fscanf (ficherocon, '%s %g %g'); %Lectura de los datos, con formato, y almacenamiento en la matriz A
fclose (ficherocon); %Cierro el ficherocon
%///ESTRUCTURACIÓN DE LA MATRIZ A/////
% Volvemos A a su forma original
M = size (A,1); %En primer lugar contamos el número de filas de A para poder
%cambiar las dimensiones de la matriz. La instrucción
%size(matriz,número) devuelve el número de filas si número = 1 y
%el número de columnas si número = 2.
A = reshape (A,3,M/3)'; %Devolvemos a A la estructura que tenía el fichero control.txt
vartotales = (M/3)-1 %Para saber cuantas columnas hay en la matriz A tras devolver su estructura real
%Recorro la matriz para guardar los valores en la variable x y la variable
%y Cálculo orejas
for i = 1:vartotales-1
r(i) = ((A(i+2,2)- A(i,2)) * (A(i+1,3)- A(i,3)))-((A(i+2,3)-A(i,3))*(A(i+1,2)- A(i,2)))
end
------------------------------------------------------------------------------------------------------
FICHERO DE ENTRADA:
puntos.txt:
A 708790.72 4496667.12
B 709469.41 4496665.74
C 709321.4 4497029
D 709164.22 4497195
E 709159.020 4497379.750
F 709496.04 4498223.52
G 709027.16 4497654.48
H 708733.09 4497532.57
I 708878.83 4497330.11
J 708687.97 4497335.65
K 708594.9 4497157.38
L 708496.53 4497113.63
M 708603.27 4497006.62
N 708721.51 4497005.94
O 708686.13 4496947.84
P 708678.63 4496934.63
Q 708655.62 4496861.21
R 708478.55 4496860.58
S 708721.15 4496704.72
T 708640.22 4496404.14
A 708790.72 4496667.12
El ejercicio trata de triangular un polígono convexo utilizando componentes monótonas (identificar orejas), para ello mi idea es recorrer el polígono en sentido antihorario, utilizar la ecuación de la recta cada 3 vértices e ir eliminando aquellos que queden fuera del polígono al hallar una diagonal. De este modo ir iterando n veces hasta que el polígono quede triangulado.
Hasta ahora he logrado que el programa lea el archivo txt y guarde una matriz ordenada de los datos del fichero, en este caso de 21x3
posteriormente intento con un bucle for aplicar la ecuación de la recta entre vertices impares para observar si el vertice par intermedio está a un lado u otro de la misma y con ello definir una diagonal o no. Aquí tengo problemas para calcular y extraer a una nueva matriz los valores calculados.
Mi idea es una vez tenga estos valores aplicar un bucle if para eliminar vértices ya triangulados.
No se si alguien pudiera decirme donde encontrar información sobre como realizar este ejercicio
Muchas gracias y un saludo!
CODIGO:
PRUEBA DE EVALUACIÓN DEL MÓDULO 1
%1.Identificación de vértices
clear;%Para borrar el workspace
clc;%Para borrar el comandWindow
%Lectura del fichero de puntos - puntos.txt
%coordenadas de los puntos de control (3columnas, nombre del punto, X, Y):
ficherocon = fopen ('puntos.txt','r');%apertura del fichero que vamos a leer
A = fscanf (ficherocon, '%s %g %g'); %Lectura de los datos, con formato, y almacenamiento en la matriz A
fclose (ficherocon); %Cierro el ficherocon
%///ESTRUCTURACIÓN DE LA MATRIZ A/////
% Volvemos A a su forma original
M = size (A,1); %En primer lugar contamos el número de filas de A para poder
%cambiar las dimensiones de la matriz. La instrucción
%size(matriz,número) devuelve el número de filas si número = 1 y
%el número de columnas si número = 2.
A = reshape (A,3,M/3)'; %Devolvemos a A la estructura que tenía el fichero control.txt
vartotales = (M/3)-1 %Para saber cuantas columnas hay en la matriz A tras devolver su estructura real
%Recorro la matriz para guardar los valores en la variable x y la variable
%y Cálculo orejas
for i = 1:vartotales-1
r(i) = ((A(i+2,2)- A(i,2)) * (A(i+1,3)- A(i,3)))-((A(i+2,3)-A(i,3))*(A(i+1,2)- A(i,2)))
end
------------------------------------------------------------------------------------------------------
FICHERO DE ENTRADA:
puntos.txt:
A 708790.72 4496667.12
B 709469.41 4496665.74
C 709321.4 4497029
D 709164.22 4497195
E 709159.020 4497379.750
F 709496.04 4498223.52
G 709027.16 4497654.48
H 708733.09 4497532.57
I 708878.83 4497330.11
J 708687.97 4497335.65
K 708594.9 4497157.38
L 708496.53 4497113.63
M 708603.27 4497006.62
N 708721.51 4497005.94
O 708686.13 4496947.84
P 708678.63 4496934.63
Q 708655.62 4496861.21
R 708478.55 4496860.58
S 708721.15 4496704.72
T 708640.22 4496404.14
A 708790.72 4496667.12
Valora esta pregunta


0