Está en la página 1de 3

La Envolvente Convexa es uno de los cálculos más importantes en Geometría Computacional

con aplicaciones en diversas áreas. La envolvente convexa está asociada a un conjunto de


puntos, y puede definirse intuitivamente como un recubrimiento o cobertura que encierra a
todos los elementos, sin vértices cóncavos.

Podemos pensarla considerando varios puntos como una banda elástica colocada
alrededor de alfileres clavados en un telgopor.

Un conjunto de puntos y su envolvente convexa. Los puntos


en rojo serían ​puntos extremos​, que pertenecen a la
envolvente, mientras que los puntos en celeste serían ​puntos
interiores​, que no pertenecen a la envolvente.

Esta definición intuitiva puede formalizarse de varias maneras, que no abordaremos


aquí. Nuestro objetivo será implementar uno de los algoritmos para encontrar aquellos vértices
que son ​puntos extremos​, y el orden en el que se forma la envolvente. Este algoritmo se
conoce como la ​marcha de Jarvis​, y se basa en la siguiente propiedad:

Un segmento definido por dos puntos x,y (que llamaremos xy) pertenecientes al
conjunto de puntos ​P, es una arista de la envolvente convexa del conjunto de puntos ​P si y
sólo si, el resto de los puntos de ​P​ están de un solo lado del segmento.
Todos los puntos se encuentran a la izquierda de xy, por lo que
xy pertenece a la envolvente convexa.

Algunos puntos se encuentran a la derecha de xz, y otros a la


izquierda, por lo que xz no pertenece a la envolvente convexa.

Aprovechando esto, el algoritmo, comenzando desde un dado punto que está garantizado que
pertenezca a la envolvente (pensar qué criterio puede utilizarse para elegirlo), analiza cada uno
de los posibles segmentos entre este punto y todos los otros. Se selecciona, como el próximo
punto perteneciente a la envolvente, aquel cuyo segmento con el punto actual tiene el “menor”
ángulo. En pseudocódigo:

1. Elegir un punto p​0 para comenzar cuya pertenencia a la envolvente esté


garantizada
2. Evaluar el ángulo de los segmentos formados por el vector que va de p​0 hacia
​ p​1​.
Para encontrar el ángulo del segmento, debe utilizarse la trigonometría
considerando el vector p​0​p​1 ​y el eje x como lados de un triangulo.
3. Elegir el próximo punto p​1 como aquel que hace que el segmento p​0​p​1 tenga
​ el
menor ángulo respecto al eje x. Encontrar el próximo punto p​2 como aquel que
hace que el segmento p​1​p​2 ​tenga el menor ángulo en un sistema de coordenadas
adecuadamente ubicado.

Esta tarea se repite hasta que el próximo punto resulta ser nuevamente p​0​, momento en
el que termina el algoritmo.

Pueden encontrar animaciones mostrando la iteración del algoritmo en :


https://www.youtube.com/watch?v=rsbxHqhyKD0
https://en.wikipedia.org/wiki/Gift_wrapping_algorithm#/media/File:Animation_depicting_t
he_gift_wrapping_algorithm.gif

Consignas:

● Implementar una función de MatLab ​envolvente_convexa​(​puntos​) que reciba como


argumento ​puntos​, una lista de posiciones de k puntos en el plano (x,y) como una
matriz de k x 2, y devuelva, de alguna manera, el orden en el que algunos de estos
puntos forman una envolvente convexa para los ​k puntos. Para calcular dicha
envolvente debe usar el algoritmo conocido como ​Marcha de Jarvis​.

También podría gustarte