Geometría computacional solapamiento de subdivisiones

Post on 03-Jul-2015

230 views 1 download

Transcript of Geometría computacional solapamiento de subdivisiones

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