Tema 4

G
e
o
m
e
t
r
í
a

C
o
m
p
u
t
a
c
i
o
n
a
l
Localización de puntos
Curso: 1º de Ingeniería Informática, Plan 2004
Profesora: Lidia Ortega Alvarado
Departamento: Informática
Curso académico: 2011/12
Ubicación: http://wwwdi.ujaen.es/asignaturas/gc/tema4.odp
Actualizado: 03/11/2010
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Índice

Introducción

Punto en Polígono

Localización en subdivisión plana

Método de las franjas

Mapas trapezoidales

Método de la cadena

Bibliografía
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Introducción
Los problemas de localización responden a la siguiente
pregunta: ¿en qué posición pinchamos en el mapa?
o lo que es lo mismo, dada un subdivisión del plano, ¿cual es
la región donde se encuentra el punto p?
una división del plano (del espacio, de un polígono, etc.) es
una partición en regiones, de modo que la unión de ellas es
el plano (polígono, espacio, etc.) y la intersección es el conjunto
de ejes o semiejes que les sirven de frontera entre las regiones.
Punto en polígono
q
¿está q dentro de P?
P
1
2 3 4
5
si el número de intersecciones es impar q está dentro
si el número de intersecciones es par q no está dentro
1
2
3
4
5
q
6
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
P x y
0
1
2
...
n-2
n-1
Suponemos
P como un
array nx2
p
2
Punto en polígono
q
P
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
origen de
coordenadas
FUNCTION PuntoEnPoligono (P:Poligono; q:Punto; n:Entero):Lógico
ENTRADA: El punto q que está dentro o no del polígono P de tamaño n
SALIDA: Verdadero si q está dentro de P
Falso en caso contrario
INICIO
PARA i <- 0 HASTA n-1 REPETIR
PARA j <- 0 HASTA 1 REPETIR
P[i,j] <- P[i,j]-q[j]
cross <- 0
PARA i <- 0 HASTA n-1 REPETIR
i1 <- (i+n-1) mod n
SI (((P(i,1)>0 AND P(i1,1)<=0)) OR
((P(i1,1)>0 AND P(i,1)<= 0 )))
ENTONCES
x <- P(i,0)*P(i1,1)-P(i1,0)*P(i,1)/(P(i1,1)-P(i,1))
SI x > 0 ENTONCES cross <- cross + 1
SI (cross mod 2) = 1
ENTONCES PuntoEnPoligono <- verdad
SINO PuntoEnPoligono <- false
FIN.
1
2
3
4
5
6
Punto en polígono
P
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Tiempo de ejecución: O(n)
Mejora para polígonos
convexos O(logn)
q
Los vértices de un polígono
convexo están ordenados
angularmente con algún punto
interior, por ejemplo el centroide
0
1
2
3
4
5
6
7
8
9
c
Punto en polígono
P
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
q
0
1
2
3
4
5
6
7
8
9
c
Búsqueda dicotómica:

Izquierda(q,c,4) = F

Izquierda(q,c,5) = F
Buscar a la izquierda

Izquierda(q,c,2) = V

Izquierda(q,c,3) = V
Buscar a la derecha

Izquierda(q,c,3) = V

Izquierda(q,c,4) = F
Encontrado
r
Diferenciar entre dentro y fuera:

Izquierda(3,4,q) = V
Dentro

Izquierda(3,4,r) = F
Fuera
Punto en polígono
P
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Tiempo de ejecución: O(logn)
Este método es también
válido para polígonos
estrellados
Un polígono es estrellado cuando existe al menos un punto en su
interior desde el cual todos los segmentos qp
i
están dentro de P.
Al conjunto de puntos que cumplen esta condición se le llama
núcleo del polígono.
0
1
2
3
4
5
6
7
8
9
c
c
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Método de las franjas
1.- Pintamos fanjas verticales
(horizontales) infintias en cada
vértice. Cada una de las n-1
franjas carece de vértices
2.- Ordenamos las franjas en
tiempo O(n logn)
3.- Buscar en las franjas
verticales en tiempo O(logn)
4.- Buscar horizontalmente en
la franja elegida
Es importante que las búsquedas se realicen en tiempo
logarítmico utilizando estructuras de datos adecuadas
q
q
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
q
Tiempo de ejecución (Método de las franjas): O(logn)
Carga de datos: O(n
2
), aunque normalmente es O(n*n
1/2
)
Una mejora al método de las franjas en cuanto a la carga
de datos es el mapa trapezoidal
Mapas trapezoidales
1.- Metemos la subdivisión plana
en un rectángulo.
Si q está fuera del rectángulo,
también lo está fuera de la
subdivisión plana
2.- Pintamos fanjas verticales
(horizontales) hacia arriba y hacia
abajo hasta encontrar un
obstáculo.
La carga de datos es lineal
6n+4 vértices y 3n+1 trapecios
Una cara de un mapa trapezoidal tiene una
o dos lados verticales y exactamente dos no
verticales, es decir, es un trapecio o un
triángulo
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Búsqueda binaria en mapas
trapezoidales
3.- Contruir un grafo acíclico que
soporte dicha partición:

1 raíz,

1 hoja por trapecio,

x-nodo para los vértices
¿está q a la izda o la decha?

y-nodo para los segmentos
¿está q arriba o abajo?
A
B
C
D
F
E
G
p
1
r
1
p
2
r
2
s
1
s
2
p
1
r
1
A
s
1
r
2
s
2
p
2
s
2
B
C
D
F
G
E
q
decha
izda
abajo
decha
abajo
Tiempo de búsqueda
esperado
O(logn)

Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Algoritmo aleatorio incremental
(mapas trapezoidales)
A
B
C
D
p
1
r
1
s
1
p
1
r
1 A
s
1
B C
D
s
2
p
2
r
2
T =mapa trapezoidal
D =árbol o estructura de datos
Para cada uno de los n segmentos
1.- Elegir un segmento s
i
aleaoriamente
2.- Encontrar los k trapecios en T
intersectados tras colocar s
i
3.- Eliminar esos k trapecios
en T e insertar los nuevos
tras colocar s
i
4.- Eliminar las k hojas
de D y crear nuevas hojas
de acuerdo con el siguiente
método
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
A
B
C
D
F
E
G
p
1
r
1
p
2
r
2
s
1
s
2
p
1
r
1 A
s
1
B C
D
Algoritmo aleatorio incremental
(mapas trapezoidales)
T =mapa trapezoidal
D =árbol o estructura de datos
Para cada uno de los n segmentos
1.- Elegir un segmento s
i
aleaoriamente
2.- Encontrar los k trapecios en T
intersectados tras colocar s
i
3.- Eliminar esos k trapecios en T
e insertar los nuevos tras colocar s
i
4.- Eliminar las k hojas de D y
crear nuevas hojas de acuerdo con
el siguiente método
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
A
B
C
D
F
E
G
p
1
r
1
p
2
r
2
s
1
s
2
p
1
r
1
s
1
r
2
s
2
B
p
2
s
2 C
D
F
G
E
T =mapa trapezoidal
D =árbol o estructura de datos
Modificar D después de colocar a s
i

4.1.- Colocar p
i
y s
i
en D
4.2.- Colocar r
i
y s
i
en D
A Tiempos:
Carga de datos:
O(n), esperado
Tiempo de construcción:
O(nlogn), esperado
Tiempo de localización:
O(logn), esperado
Algoritmo aleatorio incremental
(mapas trapezoidales)
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Método de la cadena

Consiste en encontrar una serie de separadores que dividan la
partición plana en franjas, con objeto de realizar búsquedas
binarias. A estos separadores denominamos cadenas monótonas
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Método de la cadena

Consiste en encontrar una serie de separadores que dividan la
partición plana en franjas, con objeto de realizar búsquedas
binarias. A estos separadores denominamos cadenas monótonas

Una cadena o línea poligonal es una colección de
vértices unidos entre sí de modo
que cada vértice está unido
únicamente con otros dos
(excepto los extremos)
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Método de la cadena

Consiste en encontrar una serie de separadores que dividan la
partición plana en franjas, con objeto derealizar búsquedas
binarias. A estos separadores denominamos cadenas monótonas

Una cadena o línea poligonal es una colección de
vértices unidos entre sí de modo
que cada vértice está unido
únicamente con otros dos
(excepto los extremos)

Un cadena es monótona con
respecto al eje de coordenadas y
(y-monótona) si cualquier recta
horizontal sólo intersecta con ella
como máximo una vez
Existe una restricción:
sólo es válido para grafos regulares
no y-monónona
y-monónona
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n

Un grafo es regular cuando todos sus vértices son vértices
regulares

En un grafo ordenado, el vértice i es menor que el vértice j, i<j,
sii y(v
i
)<y(v
j
). Se dice que v
i
es un vértice regular si se cumple que
j<i<k, es decir, existe al menos un vértice con menor ordenada y otro
vértice con menor ordenada (excepto en los extremos, v
0
, v
i
)

Los vértices no regulares deben
convertirse añadiéndose nuevos
ejes. El resultado son subdivisiones
planas monótonas
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n

Una vez regularizado el PSLG (planar straight-line graphs), el
siguiente paso consiste en construir las cadenas monótonas, para
ello es necesario asignar pesos a los distintos ejes.

Los pesos de los ejes siempre deben ser positivos.
● El eje v
i
v
j
es entrante en el nodo v
j
si i<j, es decir, la ordenada de
v
i
es menor que la de v
j
● El eje v
k
v
r
es saliente en el nodo v
k
si k<r, es decir,
la ordenada de v
k
es menor que la de v
r

Los vértices acumulan pesos de los
ejes salientes y entrantes de modo que
la suma de los pesos entrantes debe
ser igual a la sumade los ejes salientes.
1
1
2
1
1
1
2
1
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
Algoritmo para asignar pesos
1.- Asignar a todos los vértices el peso 1
Peso(e
i
)=1, para todo i
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
2.- PARA i = 1 HASTA n-2 REPETIR
Pesos_entrada(V
i
)= suma de los pesos de entrada de los ejes de V
i

SI (Pesos_entrada(V
i
) > Pesos_salida(V
i
)) {
d
1
= el eje de salida más a la izquierda de V
i

Pesos(d
1
) = Pesos_entrada(V
i
) – Pesos_salida(V
i
) + 1
FIN_SI
FIN_PARA 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1X 2
4>2
3 X
2>1
X 2
1=1
1=1
3>2
2=2
1<3
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
3.- PARA i = n-2 HASTA 1 REPETIR
Pesos_salida(V
i
)= suma de los pesos de entrada de los ejes de V
i

SI (Pesos_salida(V
i
) > Pesos_entrada(V
i
)) {
d
2
= el eje de entrada más a la izquierda de V
i

Pesos(d
2
) = Pesos_salida(V
i
) – Pesos_entrada(V
i
) + Pesos(d
2
)
FIN_SI
FIN_PARA
1
1
1
1
1
1
1
1
1
1
2
1
3
1
1
2
2=2
1=1
4=4
3=3
2=2
3>1
3 X
1=1
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n

Finalmente, una vez determinados los pesos de los ejes, se
localizan las cadenas monótonas.

El método: se buscan cadenas de arriba hacia abajo, siempre
lo más hacia la izquierda posible mientras el peso asociado sea
mayor que cero.

Restar 1 cada vez que se pasa por un eje
1
1
1
1
1
1
1
1
1
1
2
1
3
1
3
2
2←
0←
0←
2←
0←
1←
1←
→0
→0
0←
0←
→1
→0
→0
→1
→0
→0
→0
→0
→0
→0
→0
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
C
1
C
2
C
3
C
4
C
5
C
6 C4
C2 C6
C1 C3 C5
Tiempo para regularizar un PSLG con n vértices: O(n logn)
Carga de datos: O(n)
Tiempo de construcción: O(n logn)
Localización en subdivisión plana
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
C
1
C
2
C
3
C
4
C
5
C
6
C4
C2 C6
C1 C3 C5
Ejemplo de localización: ¿dónde está q?
q decha
izda
decha
q
Tiempo de localización
(Método de la cadena):
O(log
2
n)
Bibliografía
P
r
o
b
l
e
m
a
s

d
e

l
o
c
a
l
i
z
a
c
i
ó
n
O´ROURKE Joseph. Computational Geometry in C. Cambridge University
Press. 1998 (capítulo 2 y 7)
PREPARATA F.P., SHAMOS M.I. Computational Geometry. An Introduction.
Springer-Verlag. 1985 (capítulo 2)
BERG, KREVELD, OVERMARS, SCHWARZKOPF. Computational
Geometry, Algorithms and Applications. Springer. 1997 (capítulo 6)