You are on page 1of 36

Envolvente Convexo

comp-420
Algunas referencias

M. de Berg, O. Cheong, M. van Kreveld, M. Overmars. Computational Geometry Algorithms


and Applications. 3rd. edition. Springer 2008.

S.L. Devadoss, J.ORourke. Discrete and Computational Geometry. Princeton University


Press. 2011.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

http://jeffe.cs.illinois.edu/teaching/compgeom/notes/01-convexhull.pdf

http://www.tcs.fudan.edu.cn/rudolf/Courses/Algorithms/Alg_ss_07w/Webprojects/
Chen_hull/applications.htm

2
Envolvente convexo

Uno de los primeros problemas estudiados en la geometra


computacional.

Un conjunto S del plano, se llama convexo si y solo si, para


qq qq
cualquier par de puntos p,q S, el segmento pq est
contenido completamente en S. pqpq pq
pq

pp pp
convex
convex notconvex
not convex
convexo no convexo
3
Envolvente convexo

Para cualquier subconjunto del plano S, su envolvente


convexo CH(S) es el conjunto convexo ms pequeo que
pueda contener a S.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

4
Envolvente convexo

5
DEFINICIN:

El envolvente convexo de S, denotado como CH(S), es la interseccin de todas las regiones


convexas que contienen a S.

no es til computacionalmente

6
Otra forma de ver CH(S)

Podemos tambin definir como el polgono convexo ms grande cuyos vrtices son puntos en S.

7
Regin convexa

Regin convexa ssi cualquiera dos puntos p y q en la regin R son mutuamente visibles.

q q q q

pq pq pq pq

p p p
p
convex convex
not convex not convex

El segmento de recta entre p y q est tambin en R.

Tratamos de capturar la visibilidad de todos los puntos del conjunto S.

8
TEOREMA:

Para un conjunto de puntos S = {p1, , pn}, el envolvente convexo de S es el conjunto de


todas las combinaciones convexas de S.

9
a finite set P of points in the plane: it is the unique convex polygon
vertices are points from P and that contains all points of P. Of course
Envolvente convexo
uld prove rigorously that this is well definedthat is, that the polygon is
and that the definition is equivalent to the one given earlier, but lets
at in this introductory chapter.

o we compute
Dado un theconjunto de puntos
convex hull? Before Pwe=can {p1answer
, p2 , . . .this } en el plano,
, pnquestion we calcular una
sk another lista question:
que contenga whataquellos puntos
does it mean to de P que the
compute sean vrtices
convex hull?de CH(P ), en
have seen, ordenthedeconvex
las manecillas
hull of Pdel
is areloj.
convex polygon. A natural way
esent aentrada:
polygonconjunto
is by listing its vertices p in
, pclockwise
de puntos 1 2 3 4 5 6 7 8 , p9 .
p , , p , p , p order,
, p , p starting
n arbitrary one. So the problem we want to solve is this: given a set
1 , p2, . salida:
. . , pn } representacin del envolvente
of points in the plane, compute aconvexo
list that contains , p2 , p9 .
p4 , p5 , p8those
from P that are the vertices of CH(P), listed in clockwise order.
p9
p4
t = set of points:
p7 p1
2 , p 3 , p4 , p 5 , p 6 , p 7 , p 8 , p 9
p2
ut = representation of the convex hull: p6 p3
p5 Figure 1.1
5 , p 8 , p2 , p 9
p8 Computing a conve

e first definition of convex hulls is of little help when we want to design


Concretamente

Representamos a los puntos de S con sus coordenadas cartesianas, en dos arreglos X[1n] y
Y[1n].

CH(S) se puede representar como una lista circular de vrtices en orden anti-horario
(arbitrariamente).

Si el punto i es un vrtice de CH(S), next[i] es el ndice del punto que sigue en CH(S) en sentido
antihorario y pred[i], es el ndice del punto siguiente en sentido horario.

No importa qu vrtice tomemos como cabeza de la lista.

Para simplificar supondremos que no hay 3 vrtices co-lineales.

11
Casos simples

Cuando n=1, Cmo es CH(s)?

y cuando n=2?

y cuando n=3?

El test CCW o CW juega el mismo papel en el algoritmo de CH que una comparacin en los
algoritmos de ordenamiento (sorting).

12
Envolvente convexo (convex hull)
El algoritmo para calcular CH(P ) se basa en su estructura de aristas:
Los puntos extremos p y q de cada arista son puntos de P .
Si esta arista est dirigida de tal forma que CH(P ) est a la derecha,
entonces todos los puntos de P deben estar a la derecha de esta linea.
El argumento inverso es tambin cierto, si todos los puntos de P \{p, q}
est a la derecha de la lnea dirigida entre p y q , entonces pq es una arista
de CH(P ).
p q
Algoritmo

Algorithm S LOW C ONVEX H ULL(P)


Input. A set P of points in the plane.
Output. A list L containing the vertices of CH(P) in clockwise order.
1. E 0. /
2. for all ordered pairs (p, q) P P with p not equal to q
3. do valid true
4. for all points r P not equal to p or q
5. do if r lies to the left of the directed line from p to q
6. then valid false.

7. if valid then Add the directed edge pq to E.
8. From the set E of edges construct a list L of vertices of CH(P), sorted in clockwise order.
Envolvente convexo (convex hull)
Cmo se puede verificar que los puntos estn a la derecha o a la
izquierda de una lnea dirigida?
en los algoritmos de geometra computacional suponemos esta operacin
como una de tiempo de ejecucin constante.
Cmo se puede construir una lista, a partir de las aristas, ordenada en el
orden de las manecillas del reloj?
Las aristas en E son dirigidas, por lo que tenemos un origen y un destino.
Como las aristas estn dirigidas de tal forma que los otros puntos estn a
su derecha, el vrtice destino viene despus del origen cuando estn
ordenados en sentido de las manecillas del reloj.
Envolvente convexo (convex hull)
destination of e1
= origin of e2

e1
e2

origin of e1

Una implementacin simple del procedimiento de la lnea 8 toma O(n2 )


pero se puede mejorar a O(n lg n).
El resto del algoritmo domina el tiempo total de ejecucin.
Verificamos n2 n pares de puntos. Para cada par miramos n 2 puntos
para encontrar los que estn del lado derecho. Esto hace en total O(n3 ).
La operacin de la lnea 8 toma O(n 2
) por lo que la complejidad total del
algoritmo es O(n3 ).
Envolvente convexo (convex hull)
Algunos detalles sobre este algoritmo:
verificar co-linearidad en los puntos que no estn a la
derecha.
errores de punto flotante que no permitan determinar
de manera correcta la configuracin de los puntos en el
q
plano. r
p
en este caso habr problemas al tratar de reconstruir la
representacin del convex hull.

q
r
p
Envolvente convexo (convex hull)
Agregamos los puntos uno a uno, actualizando la solucin despus de cada
adicin.
Los puntos se agregan de izquierda a derecha por lo que primero se ordenan
de acuerdo a su coordenada x , obteniendo una secuencia ordenada
~~~~~~~~~~que
p1 , p2 , . . . , pn establece el orden en que son aadidos.
Al estar trabajando de izquierda a derecha sera tambin conveniente tener
los puntos de la envolvente convexa ordenados de izquierda a derecha.
Como esto no es el caso encontramos primero la parte superior de la
envolvente (upper hull - que va de izquierda a derecha) y luego el lower hull.
upper hull pi

p1 pn

points deleted
lower hull
Algoritmo iterativo

Observacin: de izquierda a derecha, solo hay


vueltas a la derecha en el envolvente superior
(upper hull)

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

19
Algoritmo iterativo

Inicializar insertando los puntos ms a la


izquierda.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

20
Algoritmo iterativo

Si agregamos un tercer punto, habr una vuelta a


la derecha con el punto anterior. Agregarlo.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

21
Algoritmo iterativo

Si agregamos un cuarto punto, tenemos una


vuelta a la izquierda en el tercer punto.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

22
Algoritmo iterativo

Entonces removemos el tercer punto del


envolvente superior y agregamos el cuarto punto.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

23
Algoritmo iterativo

Si agregamos el quinto punto, tenemos una vuelta


a la izquierda en el cuarto punto.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

24
Algoritmo iterativo

Entonces quitamos el cuarto punto y agregamos


el quinto.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

25
Algoritmo iterativo

Si agregamos el sexto punto, tenemos una vuelta


a la derecha en el quinto punto as que agregamos
al sexto punto.

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

26
Algoritmo iterativo

Agregamos el sptimo punto

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

27
Algoritmo iterativo

Cuando agregamos el octavo punto

tenemos que quitar el sptimo

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

28
Algoritmo iterativo

y el sexto

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

29
Algoritmo iterativo

y el sexto

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

30
Algoritmo iterativo

y el quinto

http://www.cs.uu.nl/docs/vakken/ga/slides1.pdf

31
Algoritmo
Algorithm C ONVEX H ULL(P)
Input. A set P of points in the plane.
Output. A list containing the vertices of CH(P) in clockwise order.
1. Sort the points by x-coordinate, resulting in a sequence p1 , . . . , pn .
2. Put the points p1 and p2 in a list Lupper , with p1 as the first point.
3. for i 3 to n
4. do Append pi to Lupper .
5. while Lupper contains more than two points and the last three points in Lupper do
not make a right turn
6. do Delete the middle of the last three points from Lupper .
7. Put the points pn and pn 1 in a list Llower , with pn as the first point.
8. for i n 2 downto 1
9. do Append pi to Llower .
10. while Llower contains more than 2 points and the last three points in Llower do not
make a right turn
11. do Delete the middle of the last three points from Llower .
12. Remove the first and the last point from Llower to avoid duplication of the points where the
upper and lower hull meet.
13. Append Llower to Lupper , and call the resulting list L.
14. return L
Algoritmo incremental: casos degenerados

not a right turn

Un punto tiene la misma coordenada x que otro punto. En este caso


podemos ordenarles primero respecto a x y luego respecto a y.
Los tres ltimos puntos pueden ser co-lineares. En este caso, el punto
intermedio no debera ocurrir en el envolvente convexo. Estos casos se
tratan como si fueran vuelta a la izquierda.
Errores de redondeo o de punto flotante resultarn en un polgono
convexo pero no necesariamente el correcto.
Envolvente convexo (convex hull)
El envolvente convexo de un conjunto de puntos n en el plano se puede
calcular en tiempo O(n lg n).
Prueba por induccin: antes del ciclo for, la lista Lupper contiene a los
puntos p1 y p2 , que trivialmente forma el envolvente superior de {p1 , p2 }.
Supongamos que Lupper contiene los vrtices del envolvente superior de
~~~~~~~~~~y
{p1 , . . . , pi1 } vamos a agregar pi . Despus de ejecutar el ciclo while,
sabemos que tendremos una cadena con solamente vueltas a la derecha.
Adems sabemos que esta cadena empieza en el punto extremo izquierdo
y termina en el punto extremo derecho de {p1 , . . . , pi }.
Si probamos que todos los puntos de {p1 , . . . , pi } que no estn en Lupper
estn debajo de la cadena, entonces Lupper es correcta.
Chapter 1 We conclude with the following theorem:

Envolvente convexo (convex hull)


COMPUTATIONAL GEOMETRY
Theorem 1.1 The convex hull of a set of n poin
in O(n log n) time.
Proof. We will prove the correctness of the co
lower hull computation can be proved correc
proof is by induction on the number of point tre
Por induccin sabemos que no haba punto ms arriba de
the list L la cadena antes
upper contains the points p1 and p2 ,
que pi fuera aadido. hull of {p1 , p2 }. Now suppose that Lupper c
of {p1 , . . . , pi1 } and consider the addition of
while-loop and because of the induction hypoth
empty region Lupper form a chain that only makes right turns.
lexicographically smallest point of {p1 , . . . , pi }
largest point, namely pi . If we can show that a
pi not in Lupper are below the chain, then Lupper
pi1 induction we know there is no point above the
added. Since the old chain lies below the new
point to lie above the new chain is if it lies in th
pi . But this is not possible, since such a point w
in the lexicographical order. (You should verify
pi1 and pi , or any other points, have the same
Ordenamiento: O(n lg n) To prove the time bound, we note that sort
can be done in O(n log n) time. Now consider th
Ciclo for: O(n) The for-loop is executed a linear number of ti
is how often the while-loop inside it is execu
for-loop the while-loop is executed at least o
Ciclo while: O(n) point is deleted from the current hull. As each
during the construction of the upper hull, the t
over all for-loops is bounded by n. Similarly, th
takes O(n) time. Due to the sorting step, the to
the convex hull is O(n log n).
Algoritmo incremental: casos degenerados

Primera etapa: Entender la geometra del problema, ignorar los casos


degenerados.
Segunda etapa: Ajustar el algoritmo a los casos degenerados. Tratar de
generalizar y no resolver caso por caso.
Tercera etapa: Implementacin, especial atencin a redondeos y puntos
flotantes.

You might also like