geometría computacional libro1

Download Geometría Computacional libro1

Post on 20-Jun-2015

1.593 views

Category:

Documents

3 download

Embed Size (px)

DESCRIPTION

Tópicos de Geometría Computacional

TRANSCRIPT

UNIVERSIDAD CENTRAL DEL ECUADORFacultad de Ingeniera Ciencias Fsicas y Matemticas

Geometra Computacional

Integrantes:

Mara Jos Cordero Oscar Viana Miriam Snchez

2009-2010

INDICE DE CONTENIDO 1 Introduccin a la Geometra Computacional 1.1 Qu es la Geometra Computacional? 1.2 Algunas Aplicaciones de la Geometra Computacional 1.3 Terminologa 1.3.1.1 Recta 1.3.1.2 Rayo 1.3.1.3 Segmento 1.4 Familias Notables de Polgonos 1.4.1.1 Cadena Poligonal 1.4.1.2 Poligonal simple 1.4.1.3 Poligonal Cerrada 1.4.1.4 Curva de Jordn 1.4.1.5 Polgono Convexo 1.4.1.6 Polgono Estrellado 1.4.1.7 Ncleo de un Polgono 1.4.1.8 Polgono Dbilmente Visible de un lado 1.4.1.9 Polgono Dbilmente Visible desde el exterior 1.4.1.10 Polgono Montono 1.5 rea Signada de un Tringulo 1.5.1.1 Aplicaciones del rea Signada 1.6 rea de un Polgono Triangulacin de Polgonos 2.1 Conjetura de Kleen 2.2 Tree Coloring 2.3 Diagonales y Triangulacin 2.4 Triangulacin Dual 2.5 Interseccin entre Segmentos

2

Universidad Central del Ecuador

2

Geometra Computacional

3 Conjuntos Convexos 3.1 Cierre Convexo CH(S) 3.2 Soporte de S 3.3 Caracterizaciones para determinar la Envolvente Convexa 3.4 Marcha de Jarvis 3.4.1 Descripcin Geomtrica 3.4.2 Estudio de Complejidad 3.5 Scan Graham 3.5.1 Algoritmo de Graham 3.5.2 Anlisis de Complejidad

1.1 Geometra ComputacionalLa Geometra Computacional es una disciplina que se ocupa del diseo y anlisis de algoritmos que resuelven problemas geomtricos. La complejidad de un algoritmo no es sino una medida del coste que supone su ejecucin tanto en tiempo (o nmero de operaciones elementales que ha de realizar) como en espacio (o unidades de memoria requeridas para almacenar y manipular los datos a lo largo de la ejecucin) y vendr dada en funcin del nmero de datos de entrada. El estudio de la complejidad de un algoritmo puede llevarse a cabo principalmente bajo dos puntos de vista: Complejidad en el peor de los casos. Complejidad en media (o esperada). La primera consiste en medir la complejidad del algoritmo atendiendo a su ejecucin cuando trata los datos del problema en el caso ms desfavorable, entendindose por desfavorable el ms costoso. La segunda consiste en medir la complejidad haciendo un promedio entre todos los casos (favorables y no favorables) atendiendo a la probabilidad de que aparezcan como entrada. Para ello se supone que los datos de entrada vienen dados conforme a cierta distribucin de probabilidad y se estudia cual es el tiempo esperado de ejecucin. 1.2 Aplicaciones de la Geometra Computacional La primera generacin va a ser la de los clculos numricos, aplicados sobre todo a problemas cientficos y tcnicos. La segunda necesidad comercial y administrativa, incorporaba largas listas de datos (por ejemplo alfabticos), con vistas a como leer, almacenar, modificar, seleccionar, e imprimir esos datos. Todo esto naturalmente pervive, y con fuerza, pero vivimos una tercera generacin de aplicaciones dominada por el procesamiento de informacin geomtrica y grfica, presente en reas tan diversas como son la medicina, la cartografa, el control de robots o el diseo artstico. La Geometra Computacional ha emergido, ciertamente, por la necesidad de dar respuesta a esta nueva y creciente demanda. Dentro de los campos de aplicacin ms directamente relacionados con la disciplina destacaremos la Informtica Grfica, el Diseo y Fabricacin Asistida por Ordenador (CAD/ CAM), la Caracterizacin y Reconocimiento Automtico de Formas (Pattern Recognition), el Diseo VLSI, la visin Artificial, la Cartografa y la Robtica. 1.3 Terminologa El elemento geomtrico ms sencillo es el punto, que en el plano vendr dado por un par ordenado de nmeros reales, generalmente sus coordenadas cartesianas. 1.3.1 La recta que pasa por dos puntos, p; q, es el lugar geomtrico de los puntos.

Universidad Central del Ecuador

3

Geometra Computacional

1.3.2 El rayo que emana de p y pasa por q es la semirrecta de puntos

1.3.3 El segmento de extremos p y q es el conjunto

Cdigo en Matlab%funcin que dibuja un segmento entre 2 puntos function seg = segmento2(A,B) t = 0:0.01:1; AB = B-A; X1 = A(1)+t*AB(1); Y1 = A(2)+t*AB(2); hold on plot(X1,Y1,'.'); end

1.4 Familias notables de polgonos En la prctica se ha comprobado que determinados algoritmos que se ejecutan sobre polgonos tienen un mejor rendimiento, en cuanto a velocidad, si el polgono de entrada tiene ciertas buenas propiedades. Otras veces, los problemas reales involucran polgonos con caractersticas especiales y resulta ms fcil encontrar algoritmos que resuelvan esos problemas para dichos polgonos que para polgonos generales. 1.4.1 Cadena Poligonal Un conjunto ordenado de n puntos distintos en el plano determina una (cadena) poligonal que es la unin de los segmentos . A estos segmentos se les llama lados y a sus extremos vrtices de la poligonal. Lados adyacentes en una poligonal son aqullos que son consecutivos en la lista ordenada de segmentos anterior. 1.4.2 Una poligonal simple es aqulla en la que dos lados, si se cortan, lo hacen exactamente en uno de sus extremos y adems son adyacentes. 1.4.3 Una poligonal cerrada determinada por segmentos . es la unin de

Universidad Central del Ecuador

4

Geometra Computacional

1.4.4 Una poligonal cerrada simple determina una Curva de Jordan que divide al plano en tres regiones: 1.- Interior a la curva 2.- Exterior a la curva 3.- La propia curva Al conjunto de puntos de la regin interior junto con los puntos de la poligonal cerrada. El interior del polgono P, , es el conjunto de puntos de la regin interior. La frontera del polgono, o P, es el conjunto de puntos de la poligonal cerrada simple. Y el exterior del polgono, , es el conjunto de puntos de la regin exterior.

Cdigo 1 de la poligonal en Matlab%funcin que dibuja una poligonal que recibe un Punto representado por un vector function pol = Poligonal(m) n = input('ingrese nmero de puntos: '); for i = 1: n v = input('ingrese P(x,y): '); for j = 1: 2 m (i,j) = v(j) end end for k = 2: n for j = 1: 2 p(j) = m(k-1,j); q(j) = m(k,j) ; r(j) = m(n,j); s(j) = m(1,j); end segmento(p,q) segmento(r,s) end end

Universidad Central del Ecuador

5

Geometra Computacional

Cdigo 2 de la poligonal en Matlab%funcin que dibuja una Poligonal cerrada. function cadena = cadenaPol(a,nr) %se ingresa una matriz (nrow,2) for i = 2: nr for j = 1: 2 d(j) = a(i-1,j); e(j) = a(i,j) ; f(j) = a(nr,j); g(j) = a(1,j); if j == 2 % se llama a la funcin segmento que lo grafica segmento2(d,e) segmento2(f,g) text(d(1),d(2),'P') text(e(1),e(2),'P') end end end end

Cdigo en C# //dibujamos las lneas del polgono con el mouseprivate void panel_screen_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point p = new Point(e.X, e.Y); puntos.Add(p); status = prosess_status.DIBUJANDO; } else if (e.Button == MouseButtons.Right) { if (puntos.Count < 3) { MessageBox.Show("Debe seleccionar al menos 3 puntos"); return; } polygon = new Point[puntos.Count]; for (int i = 0; i < puntos.Count; i++) polygon[i] = (Point)puntos[i]; Graphics g = panel_screen.CreateGraphics(); g.Clear(Color.White); dibujarPoligono(); status = prosess_status.POLIGONOLISTO; btnTriangular.Enabled = true; } } //en este metodo dibujaremos private void panel_screen_MouseMove(object sender, MouseEventArgs e) { if (status == prosess_status.DIBUJANDO) { Point inicio, fin; Graphics g = panel_screen.CreateGraphics();

Universidad Central del Ecuador

6

Geometra Computacional

g.Clear(Color.White); inicio = (Point)puntos[0]; g.DrawLine(new Pen(Color.Yellow, 2), inicio.X - 6, inicio.Y, inicio.X + 6, inicio.Y); g.DrawLine(new Pen(Color.Yellow, 2), inicio.X, inicio.Y - 6, inicio.X, inicio.Y + 6); for (int i = 0; i < puntos.Count - 1; i++) { inicio = (Point)puntos[i]; g.DrawLine(new Pen(Color.Yellow, 2), inicio.X - 6, inicio.Y, inicio.X + 6, inicio.Y); g.DrawLine(new Pen(Color.Yellow, 2), inicio.X, inicio.Y - 6, inicio.X, inicio.Y + 6); fin = (Point)puntos[i + 1]; g.DrawLine(new Pen(Color.Yellow, 2), fin.X - 6, fin.Y, fin.X + 6, fin.Y); g.DrawLine(new Pen(Color.Yellow, 2), fin.X, fin.Y - 6, fin.X, fin.Y + 6); g.DrawLine(new Pen(Color.Blue, 2), inicio, fin); } inicio = (Point)puntos[puntos.Count - 1]; fin = new Point(e.X, e.Y); g.DrawLine(new Pen(Color.Blue, 2), inicio, fin); g.DrawLine(new Pen(Color.Yellow, 2), fin.X - 6, fin.Y, fin.X + 6, fin.Y); g.DrawLine(new Pen(Color.Yellow, 2), fin.X, fin.Y - 6, fin.X, fin.Y + 6); } lbCoordenadas.Text = "X:" + e.X + " , Y:" + e.Y; } private void area() { int n = puntos.Count; float area = 0; for (int i = 1; i < n - 1; i++) area = area + (((Point)puntos[i]).Y - ((Point)puntos[i + 1]).Y) * (((Point)puntos[i]).Y - ((Point)puntos[i + 1]).Y); area = Math.Abs(area); MessageBox.Show("El area es:" + area); } private void btnTriangular_Click(object sender, EventArgs e) { area(); }

public void dibujarPoligono()

Universidad Central del Ecuador

7

Geometra Computacional

private void btnLimpiar_Click(object sender, EventArgs e) { puntos.Clear(); polygon = null; Graphics g = panel_screen.CreateGraphics(); g.Clear(Color.White); btnTriangular.Enabled = false; status = prosess_status.ESPERANDO; }

{ if (polygon != null) { Graphics g = panel_screen.CreateGraphics(); for (int i = 0; i < polygon.Length; i++) { g.DrawLine(new Pen(Color.Yellow, 2), polygon[i].X - 8, polygon[i].Y, polygon[i].X + 8, polygon[i].Y); g.DrawLine(new Pen(Color.Yellow, 2), polygon[i].X, polygon[i].Y - 8, polygon[i].X, polygon[i].Y + 8); } g.DrawPolygon(polygon_pen, polygon); } } private void panel_screen_Paint(object sender, PaintEventArgs e) { switch (status) { case prosess_status.ESPERANDO: break; case prosess_status.POLIGONOLISTO: dibujarPoligono(); break; default: break; } }

Un polgono queda perfectamente de