geometría computacional solapamiento de subdivisiones
TRANSCRIPT
Geometría Computacional: Solapamiento de SubdivicionesPlanares
Maikel Arcia
Miguel Sancho
Lecture 2
Line Segment Intersection
Computational Geometry
Prof.Dr.Th.Ottmann
Thematic map overlay in Geographical Information Systems
carreterasrios Solapamiento
de mapas
1. Thematic overlays provide important information.
2. Roads and rivers can both be regarded as networks of line segments.
Motivación
Solapamientos de Mapa
Determinar intersecciones entre capas.
Geometría Computacional
Intersección de redes.
De forma simplifciada el problema de solapamientos de mapas, es la intersección de redes representadas por una colección segmentos.
Geometría Computacional
Objetivo
Diseñar un algoritmo para solapar dos subdiviones planares usando:
Barrido del plano
Intersecciones de Segmentos
Estructura de datos DCEL
Geometría Computacional
Solapamiento de Subdivisiones
Geometría Computacional
Solapamiento de Subdivisiones
k
g
i
h
l
Geometría Computacional
Solapamiento de Subdivisiones
k
g
i
h
l
n
Geometría Computacional
Solapamiento de Subdivisiones
f
j
m
Geometría Computacional
Solapamiento de Subdivisiones
Geometría Computacional
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g)
g
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g)
g
(f,h)h
c
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g)
g
(f,h)h
i
(f,i)
c
g
h
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g) (f,h)
i
(f,i)
j (j,g)
(j,g)
(j,h)
(j,i)
c
g
h
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g) (f,h)
i
(f,i)
j (j,g)
(j,g)
(j,h)
(j,i)
k
(j,k)
(j,k)
g
h
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g) (f,h)
i
(f,i)
j (j,g)
(j,g)
(j,h)
(j,i)
k
(j,k)
(j,k)
l
(j,l)
g
h
Solapamiento de Subdivisiones
Geometría Computacional
Nuevos vértices Nuevas semi-aristas
Vértices que se
preservan
Vértices que se
preservan
semi-aristas
que se
preservan
semi-aristas que
se preservan
Las caras deben ser
etiquetadas con las etiquetas
de las caras que se solapan.
f(f,g) (f,h)
i
(f,i)
j (j,g)
(j,g)
(j,h)
(j,i)
k
(j,k)
(j,k)
l
(j,l)
(m,n)
Las caras infinitas siempre se
interceptan.
Solapamiento de Subdivisiones
Partes de las dos subdivisiones se podrían reutilizar.
Solo hay que modificar las semi-aristas incidentes en un vértice de intersección entre las dos subdivisiones.
¿Idea?
Geometría Computacional
Solapamiento de Subdivisiones
Partes de las dos subdivisiones se podrían reutilizar.
Solo hay que modificar las semi-aristas incidentes en un vértice de intersección entre las dos subdivisiones.
¿Idea? Copiar las dos DCEL en una nueva y transformarla en una DCEL válida.
Geometría Computacional
Geometría ComputacionalGeometría Computacional
¿Transformar la nueva DCEL en una válida?
Computar los nuevos vértices.
Crear las nuevas semi-aristas.
Para toda semi-arista e y vértice v afectados, actualizar las referencias: Origing(e), Next(e), Prev(e), Twin(e), IncidentFace(e) IncidentEdge(v).
Crear nuevos registros para cada cara, etiquetados con las etiquetas de las caras que se solapan.
Geometría Computacional
Computar nuevos vértices
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
Geometría Computacional
Computar nuevos vértices
Usar el algoritmo para determinar intersecciones de segmentos.
En las intersecciones de una misma subdivisión no se realiza ninguna operación adicional.
En las nuevas intersecciones se actualizan los vértices y semi-aristas.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Por cada nueva semi-arista se actualiza: Origing, Next, Prev.
Por cada semi-arista reutilizada se actualiza solo el la referncia Next.
Next(e1)
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Por cada nueva semi-arista se actualiza: Origing, Next, Prev.
Por cada semi-arista reutilizada se actualiza solo el la referncia Next.
Next(e1)
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Por cada nueva semi-arista se actualiza: Origing, Next, Prev.
Por cada semi-arista reutilizada se actualiza solo el la referncia Next.
Next(e1)
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Por cada nueva semi-arista se actualiza: Origing, Next, Prev.
Por cada semi-arista reutilizada se actualiza solo el la referncia Next.
Next(e1)
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Las semi-aristas se reutilizan y se adiciona una nueva por cada semi-arista afectada.
Por cada nueva semi-arista se actualiza: Origing, Next, Prev.
Por cada semi-arista reutilizada se actualiza solo el la referncia Next.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Next(e1)
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista - arista
e1
Next(e1)
Las nuevas caras siguen estando a la izquierda de las semi-aristas.
Luego las semi-aristas no deben ser reorientadas.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso arista – vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
Todos los casos se pueden reducir al caso en que dos vértices de las subdivisiones coinciden.
¿Cómo determinar el orden de las semi-aristas para actualizar las referencias?
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
El estado de la línea de barrido contiene los segmentos ordenados abajo hacia arriba.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
El estado de la línea de barrido contiene los segmentos ordenados abajo hacia arriba.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso vértice - vértice
El estado de la línea de barrido contiene los segmentos ordenados abajo hacia arriba.
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso especial arista -arista
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso especial arista -arista
Es necesario chequear si los segmentos son colineales.
Solo es necesario crear
dos nuevas semi-
aristas
Geometría ComputacionalGeometría Computacional
Crear nuevas semi-aristas: caso especial arista -arista
Es necesario chequear si los segmentos son colineales.
Geometría ComputacionalGeometría Computacional
Complejidad temporal para actualizar vértices y semi-aristas.
Actualizar las semi-aristas en un vértice v toma un tiempo O(deg(v)), donde deg(v) es el grado del vértice.
Luego actualizar todas las semi-aristas toma un tiempo O(m), donde m es el número de aristas, lo que es equivalente a O(n).
Luego actualizar las semi-aristas no incrementa el tiempo de determinar las intersecciones, el cual es O((n+k)log n), donde k es el número de intersecciones.
Geometría ComputacionalGeometría Computacional
Actualización de las caras
Crear un registro para cada cara.
Para cada registro f crear las referencias:
- OuterComponent(f)
- InnerComponents(f)
Para cada semi-arista e actualizar la referencia InidentFace(e).
¿Cúantos registros de caras se requieren?
Geometría ComputacionalGeometría Computacional
Actualización de las caras
Crear un registro para cada cara.
Para cada registro f crear las referencias:
- OuterComponent(f)
- InnerComponents(f)
Para cada semi-arista e actualizar la referencia InidentFace(e).
¿Cúantos registros de caras se requieren?
Número de caras = Número de ciclos exteriores + 1
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Se busca el vértice más a la izquierda.
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Se busca el vértice más a la izquierda.
Si el ángulo de giro es mayor que 180 es un ciclo interior
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Se busca el vértice más a la izquierda.
Si el ángulo de giro es mayor que 180 es un ciclo interior
Si el ángulo de giro es menor que 180 es un ciclo exterior
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Se busca el vértice más a la izquierda.
Si el ángulo de giro es mayor que 180 es un ciclo interior
Si el ángulo de giro es menor que 180 es un ciclo exterior
Se puede resolver con giros de segmentos sin calcular los ángulos
Geometría ComputacionalGeometría Computacional
¿Cómo saber si un ciclo es exterior?
Construir un grafo G no dirigido tal que
Todo ciclo límite corresponda a un nodo Cj.
Un nodo C∞ para el límite exterior imaginario de la cara ilimitada.
(Ci, Cj) es una arista si y solo si se cumplen ambas:
(a) Uno de los ciclo sea el límite de un hueco.
(b) Y el otro ciclo tenga una semi-arista inmediatamente a la izquierda del vértice extremo izquierdo del primer ciclo.
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
C2
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
C2C3
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
C2C3
C6
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
C2C3
C6
C5
C4
C7
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
C∞
C1
C2C3
C6
C5
C4
C7
Cada componente conexa del grafo corresponde a una cara, con su componente exterior y su lista de componenetes interiores
Geometría ComputacionalGeometría Computacional
Construcción del grafo G
Estudiar en el libro
Computational Geometry, Algorithms and Applications
Epígrafe 2.3, pág. 33
Modificar el algoritmo de barrido del
plano para construir G.
Cuando un punto de evento v es el vértice
extremo izquierdo de un ciclo de un hueco C
1. Localizar la arista e a la izquierda de v
y el ciclo C de esta
2. Adicionar la arista (C, C ) a G.
Mantener una referencia desde toda semi-arista
al nodo en G que el ciclo al que esta pertenece
Geometría ComputacionalGeometría Computacional
Etiquetado de las caras
Una vez creados todos los registros de las caras y establecidas sus referencias, se recorren los bordes exteriores y se consultan las referencias a las caras de las subdivisiones y se establecen las referencias IncidentFace(e) hacia la nueva cara con la nueva etiqueta combinada.
Geometría ComputacionalGeometría Computacional
Complejidad temporal
El grafo G se construye en el mismo barrido del plano sin costo adicional.
Los registros de las caras se construyen y se etiquetan en un tiempo O(n)
El algoritmo se puede implementar en un tiempo O((n+k)log n).
Geometría ComputacionalGeometría Computacional
Operaciones con polígonos
Geometría ComputacionalGeometría Computacional
Operaciones con polígonos
P Q
Geometría ComputacionalGeometría Computacional
Operaciones con polígonos
P Q
P Q
Geometría ComputacionalGeometría Computacional
Operaciones con polígonos
P Q
P Q
P – Q
Geometría ComputacionalGeometría Computacional
Operaciones con polígonos
P Q
P – Q
P Q
Bibliografía base
MM. de Berg, M. van Kreveld, M. Overmars, O. Schawarzkopf: Computational Geometry, Springer Verlag, 1997.
Geometría ComputacionalGeometría Computacional