31. Polígonos

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.

31.1 Introducción

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.

31.2 Elementos y nomenclatura

  • Vértices: puntos ordenados que definen el contorno.
  • Lados: segmentos VᵢVᵢ₊₁.
  • Diagonales: segmentos entre vértices no consecutivos.
  • Ángulos interiores: regiones entre lados adyacentes.
  • Interior y exterior: regiones separadas por el borde.
Cantidad de diagonales = n(n−3)/2

Los índices suelen manejarse módulo n: el sucesor de Vₙ₋₁ es V₀.

31.3 Interpretación visual

Polígono simple cóncavo, polígono convexo, autointersección, triangulación y fórmulas
El orden de los vértices determina los lados, la orientación y la región encerrada.

31.4 Polígonos simples y no simples

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.

31.5 Convexidad y concavidad

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.

giroᵢ=(Vᵢ−Vᵢ₋₁)×(Vᵢ₊₁−Vᵢ)

31.6 Suma de ángulos interiores

Un polígono simple de n lados puede dividirse en n−2 triángulos. Por eso:

Suma de ángulos interiores = (n−2)·180°

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.

31.7 Perímetro

El perímetro es la suma de las longitudes de todos los lados, incluido el que cierra la figura:

P = Σ distancia(Vᵢ,V₍ᵢ₊₁₎ mod n)

Esta operación cuesta O(n). El resultado posee la misma unidad lineal que las coordenadas.

31.8 Área mediante la fórmula del cordón

Para un polígono simple cuyos vértices están ordenados alrededor del borde:

Área firmada = ½ Σ(xᵢyᵢ₊₁−yᵢxᵢ₊₁)
Área geométrica = |Área firmada|

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.

31.9 Orientación y centroide

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:

Cx = [1/(6A)] Σ(xᵢ+xᵢ₊₁)·cruzᵢ
Cy = [1/(6A)] Σ(yᵢ+yᵢ₊₁)·cruzᵢ
cruzᵢ=xᵢyᵢ₊₁−xᵢ₊₁yᵢ

El promedio de los vértices no coincide necesariamente con el centroide del área.

31.10 Triangulación

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.

31.11 Simulación interactiva

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.

Perímetro
Área
Orientación
Forma
Punto P

31.12 Dibujar y calcular el área

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.

31.13 Punto dentro del polígono

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.

31.14 Aplicaciones, errores y conclusión

Los polígonos aparecen en mapas, obstáculos, selección, recortes, siluetas, zonas de navegación, colisiones y mallas.

Ejemplo animado: triangulación y ensamblado

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.

n vértices → n−2 triángulosPolígono original
8 vértices · 6 triángulos

Errores comunes

  • Olvidar conectar el último vértice con el primero.
  • Entregar vértices desordenados o repetirlos innecesariamente.
  • Suponer que todo polígono es convexo.
  • Triangular un polígono cóncavo mediante un abanico inválido.
  • Ignorar autointersecciones o lados de longitud cero.
  • Perder el signo del área cuando se necesita orientación.

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.