Você está na página 1de 15

Geometra Computacional

La geometra computacional es una rama de ciencia de la computacion que


estudia algoritmos para resolver problemas geometricos.
Nos concetraremos en la representacion y programacion de algunos objetos y
algoritmos en el plano cartesiano.
Un punto solo tiene posicion y se representa con un par de coordenadas (x, y).
Una lnea esta denida por todos los puntos que satisfacen la ecuacion
ax + by + c = 0.
Formas alternativas de escribir la ecuacion:
y = mx + n,
donde m se conoce como la pendiente de la recta, y (0, n) es un punto de la
recta.
Jorge Baier Aranda, PUC 68
La misma ecuacion se puede escribir dado un punto (x
1
, y
1
) y la pendiente:
y y
1
= m(x x
1
).
Dado dos puntos (x
1
, y
1
) y (x
2
, y
2
), la ecuacion es:
y y
1
=
y
1
y
2
x
1
x
2
(x x
1
).
o
(y
2
y
1
)x + (x
1
x
2
)y + x
2
y
1
x
1
y
2
= 0.
Tambien es frecuente escribir la ecuacion de la forma
x
a
+
y
b
= 1,
donde (a, 0) y (0, b) son puntos de la recta.
El punto de interseccion de dos rectas l
1
: y = m
1
x + n
1
y l
2
: y = m
2
x + n
2
es

n
2
n
1
m
1
m
2
, m
1
n
2
n
1
m
1
m
2
+ n
1

Jorge Baier Aranda, PUC 69


El angulo que forman dos rectas no paralelas l
1
: a
1
x + b
1
y + c
1
y l
2
: a
2
x +
b
2
y + c
2
= 0 esta dado por
arctan

a
1
b
2
a
2
b
1
a
1
a
2
+ b
1
b
2

en caso de usar rectas con pendientes, el angulo es el siguiente:


Si m es la pendiente de una recta, entonces
1
m
es la pendiente de una recta
perpendicular a ella.
Jorge Baier Aranda, PUC 70
Segmentos, vectores y producto cruz
Un segmento es un subconjunto de una lnea recta comprendido entre dos
puntos de ella.
Un vector es un segmento dirigido entre el origen y un punto del plano. Si
p
0
= (0, 0) y p
1
= (x, y), entonces usamos la notacion p
1
(o simplemente p
1
)
para hablar del segmento dirigido

p
0
p
1
.
Jorge Baier Aranda, PUC 71
El producto cruz entre dos vectores p
1
= (x, y) y p
2
se dene por
p
1
p
2
=

x
1
x
2
y
1
y
2

y representa el area (con signo) del paralelogramo de la gura.


horario
sentido
p
1
p
2
p
1
+ p
2
x
y
Si p1 esta en sentido horario desde p
2
con respecto al origen, entonces p
1
p
2
>
0.
Si p
1
p
2
= 0, entonces p
1
y p
2
son colineales con el origen.
Jorge Baier Aranda, PUC 72
Pregunta: como determinar si al recorrer los segmentos p
0
p
1
y p
1
p
2
, desde p
0
se debe doblar a la izquierda o a la derecha?
Respuesta: el giro sera a la izquierda ssi

p
1
p
2
esta en sentido horario desde

p
1
p
0
,
es decir, ssi
(p
2
p
1
) (p
0
p
1
) > 0
Jorge Baier Aranda, PUC 73
Interseccin de dos segmentos
Es muy sencillo usar el producto cruz para determinar si dos segmentos se
intersectan.
La prueba se realiza en dos fases. En la primera (rechazo rapido) se revisa si los
rectangulos mas peque nos que contienen a los segmentos se intersectan.
Si tenemos un segmento p
1
p
2
(con p
1
= (x
1
, y
1
), p
2
= (x
2
, y
2
), entonces el
rectangulo mas peque no que lo contiene es el de esquina inferior izquierda
p
I
= (x
I
, y
I
),
donde x
I
= mn{x
1
, x
2
} y y
I
= mn{y
1
, y
2
}, y de esquina superior derecha
p
S
= (x
S
, y
S
),
donde x
S
= max{x
1
, x
2
} y y
S
= max{y
1
, y
2
}.
Jorge Baier Aranda, PUC 74
Dos rectangulos, representados por sus esquinas superior derecha e inferior
izquierda, (p
1
I
, p
1
S
) y (p
2
I
, p
2
S
), se intersectan ssi
(mn{x
1
S
, x
2
S
} max{x
1
I
, x
2
I
}) (mn{y
1
S
, y
2
S
} max{y
1
I
, y
2
I
})
Jorge Baier Aranda, PUC 75
La segunda fase consiste en determiar si los extremos del primer segmento quedan
a lados opuestos del primero y vice versa. Esto se puede hacer facilmente usando
el producto cruz.
Mirando la siguiente gura:
p
1
p
2
p
4
p
3
Sabemos que para que los extremos de p
3
p
4
queden a lados diferentes de p
1
p
2
,
se tiene que dar que p
3
p
1
y p
4
p
1
esten en sentidos horarios distintos con
respecto a p
2
p
1
.
As, basta con chequear que:
((p
3
p
1
) (p
2
p
1
))((p
4
p
1
) (p
2
p
1
)) 0
Jorge Baier Aranda, PUC 76
Para asegurarse que los segmentos se intersectan hay que vericar la misma
condicion, pero con respecto al otro segmento.
Como vericar si una secuencia de puntos p
0
, . . . , p
n1
son los vertices de un
polgono convexo?
Respuesta: vericando que al recorrer los vertices no hayan vueltas a la derecha
y a la izquierda, simultaneamente. Esto se puede hacer usando el producto cruz.
Jorge Baier Aranda, PUC 77
Rayos horizontales
Un rayo horizontal hacia la derecha desde p
0
= (x
0
, y
0
) es el conjunto de puntos
con coordenadas (x, y
0
), con x x
0
.
La intereseccion entre un rayo horizontal hacia la derecha desde p
0
y un segmento
p
1
p
2
, con p
1
= (x
1
, y
1
), p
2
= (x
2
, y
2
) se puede haciendo la intereseccion entre el
segmento p
1
p
2
y el segmento p
0
p
3
con
p
3
= (x
0
, max{y
0
, y
1
, y
2
})
Jorge Baier Aranda, PUC 78
Pertenece p a P?
Preguntarse si un punto p pertenece a un polgono P = p
0
, . . . , p
n
es un
problema sencillo si P es convexo. Como lo hacemos?
En un caso mas general, tal vez no lo es tanto...
El problema se puede enfrentar usando el teorema de la curva de Jordan, que
simplemente dice que un polgono divide al plano en dos regiones, la interior y la
exterior.
Jorge Baier Aranda, PUC 79
As, si dibujamos alg un rayo que salga desde el punto, si este atraviesa el borde
un n umero impar de veces, entonces el punto esta dentro del polgono.
Al programar una rutina que verque esto, hay que tener en cuenta que el rayo
podra pasar por un vertice...
Jorge Baier Aranda, PUC 80
rea de un Polgono
Es sorprendentemente sencillo calcular el area de un polgono usando el producto
cruz.
La idea es elegir un punto arbitrario y sumar las areas con signo de todos los
triangulos denidos entre el punto arbitrario y una arista del polgono (se debe
recorrer los vertices del polgono en orden horario o antihorario).
As si P = p
0
, . . . , p
n
es un polgono cualquiera, entonces
A(P) =
1
2
n1

i=0
(x
i
y
i+1
x
i+1
y
i
).
Jorge Baier Aranda, PUC 81
Triangulacin de polgonos
A un cuando el area de un polgono cualquiera puede ser facil de calcular, el
problema de triangular un polgono puede ser relevante.
El algoritmo de Van Gogh ataca este problema cortando orejas al polgono.
Una oreja es un triangulo formado por dos aristas contiguas del polgono u una
cuerda de este.
Para encontrar una oreja, basta con recorrer el polgono en sentido horario y
encontrar un giro a la izquierda (esto se puede determinar con el producto cruz).
Una vez encontrada la oreja, se eliminan las aristas del polgono y se agrega a la
cuerda como una nueva arista.
Jorge Baier Aranda, PUC 82

Você também pode gostar