Un polígono encierra una región mediante una cadena cerrada de segmentos. Su lista ordenada de vértices permite dibujarlo, medirlo, clasificarlo, dividirlo en triángulos y realizar pruebas espaciales.
Un polígono está formado por n vértices V₀,V₁,…,Vₙ₋₁ y los segmentos que unen cada vértice con el siguiente. El último vértice se conecta nuevamente con el primero para cerrar la figura.
Los polígonos representan siluetas, obstáculos, zonas, contornos, botones, mapas y mallas. El triángulo es el polígono más pequeño posible.
Los índices suelen manejarse módulo n: el sucesor de Vₙ₋₁ es V₀.
Un polígono simple no posee cruces entre lados no consecutivos. En uno no simple o autointersectado, algunos lados se cruzan y la noción de interior requiere una regla adicional.
Muchos algoritmos de área, relleno y triangulación suponen polígonos simples. Conviene validar el contorno si los vértices proceden de entrada libre del usuario.
Un polígono es convexo si el segmento entre cualquier par de puntos interiores permanece dentro. También puede reconocerse porque todos sus giros consecutivos conservan el mismo signo.
Un polígono es cóncavo cuando al menos un ángulo interior supera 180° y existe alguna diagonal que sale parcialmente del interior.
Un polígono simple de n lados puede dividirse en n−2 triángulos. Por eso:
Un cuadrilátero suma 360°, un pentágono 540° y un hexágono 720°. La fórmula no implica que todos los ángulos sean iguales.
El perímetro es la suma de las longitudes de todos los lados, incluido el que cierra la figura:
Esta operación cuesta O(n). El resultado posee la misma unidad lineal que las coordenadas.
Para un polígono simple cuyos vértices están ordenados alrededor del borde:
También se denomina fórmula de Gauss o shoelace. Funciona con polígonos convexos y cóncavos simples, pero un contorno autointersectado produce cancelaciones.
El signo del área firmada indica el orden horario o antihorario en el plano matemático. Invertir la lista de vértices cambia el signo pero no el área geométrica.
Para área firmada A≠0, el centroide de una lámina poligonal uniforme es:
El promedio de los vértices no coincide necesariamente con el centroide del área.
Triangular un polígono simple significa dividirlo en n−2 triángulos sin superposición. En un polígono convexo puede trazarse un abanico desde cualquier vértice.
En un polígono cóncavo, un abanico puede crear diagonales exteriores. Un algoritmo clásico es recorte de orejas: encuentra un triángulo interno sin otros vértices, lo elimina y repite.
La triangulación permite rasterizar, interpolar y aplicar algoritmos diseñados para triángulos.
Selecciona la cantidad de vértices, modifica la concavidad y desplaza el punto P. El laboratorio genera un contorno simple, calcula sus medidas y aplica el método del rayo para decidir pertenencia.
function areaFirmada(vertices) {
let suma = 0;
for (let i=0; i<vertices.length; i++) {
const a=vertices[i];
const b=vertices[(i+1)%vertices.length];
suma += a.x*b.y - a.y*b.x;
}
return suma/2;
}
const vertices = [
{ x: 0, y: 0 },
{ x: 6, y: 0 },
{ x: 5, y: 4 },
{ x: 2, y: 5 },
{ x: 0, y: 3 }
];
const area = areaFirmada(vertices);
console.log(`Área firmada: ${area.toFixed(2)}`);
console.log(`Área: ${Math.abs(area).toFixed(2)}`);
console.log(`Orientación: ${area > 0 ? "antihoraria" : "horaria"}`);
console.log(`Cantidad de vértices: ${vertices.length}`);Al presionar Ejecutar, se muestran el área firmada, el área absoluta, la orientación y la cantidad de vértices.
El método de paridad lanza un rayo desde P. Si cruza el borde un número impar de veces, P está dentro; si lo cruza un número par, está fuera:
function contiene(vertices,p) {
let dentro=false;
for(let i=0,j=vertices.length-1;i<vertices.length;j=i++){
const a=vertices[i], b=vertices[j];
const cruza=(a.y>p.y)!==(b.y>p.y) &&
p.x < (b.x-a.x)*(p.y-a.y)/(b.y-a.y)+a.x;
if(cruza) dentro=!dentro;
}
return dentro;
}
const vertices = [
{ x: 0, y: 0 },
{ x: 6, y: 0 },
{ x: 6, y: 4 },
{ x: 3, y: 2 },
{ x: 0, y: 4 }
];
const puntos = [
{ x: 1, y: 1 },
{ x: 3, y: 3 },
{ x: 7, y: 2 }
];
puntos.forEach(punto => {
const estado = contiene(vertices, punto) ? "dentro" : "fuera";
console.log(`(${punto.x}, ${punto.y}): ${estado}`);
});Al presionar Ejecutar, se clasifican tres puntos respecto de un polígono cóncavo. Para tratar el borde explícitamente, primero se comprueba si P pertenece a alguno de los segmentos.
Los polígonos aparecen en mapas, obstáculos, selección, recortes, siluetas, zonas de navegación, colisiones y mallas.
El polígono cóncavo se divide progresivamente en triángulos mediante recorte de orejas. Después, las piezas se separan para revelar la malla resultante y vuelven a ensamblarse sin alterar el área total.
Recuerda: la lista ordenada de vértices define el polígono; la fórmula del cordón calcula área y orientación; y la triangulación reduce problemas complejos a triángulos.
En el próximo tema estudiaremos los polígonos regulares.