Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenidos
Introduccion
Representacion de objetos fundamentales
Puntos y vectores
Lneas y segmentos
Tecnicas de barrido
A Safe Bet
November Rain
Introduccion
En qu
e consiste un problema de geometra computacional?
Generalmente, los problemas de geometra en el ICPC requieren
calcular alguna cantidad (e.g. distancia, area, parametros optimos
para una configuracion determinada, etc) relacionada con
elementos geometricos como puntos, lneas, crculos, y demas. La
solucion de un problema de geometra involucra dos pasos:
1
Introduccion (cont.)
A FAVOR: Podemos visualizar los algoritmos facilmente.
EN CONTRA: Debemos evitar nuevos tipos de problemas (errores
numericos, casos degenerados, c
odigo mas largo, etc).
Introduccion (cont.)
A FAVOR: Podemos visualizar los algoritmos facilmente.
EN CONTRA: Debemos evitar nuevos tipos de problemas (errores
numericos, casos degenerados, c
odigo mas largo, etc).
Antes de empezar, algunas consideraciones generales
A lo largo de esta clase nos vamos a concentrar casi
exclusivamente en problemas de geometra en 2D.
La pr
actica y las buenas costumbres son todava mas
importantes que en los problemas convencionales.
Los problemas de geometra muchas veces sirven para
distinguir a los buenos equipos de los excelentes!
Puntos y vectores
Un punto en el plano (o un vector desde el origen hasta dicho
punto) se puede representar con un par ordenado de coordenadas
en un sistema cartesiano:
~ = (x, y )
P
con
x, y R
Algunas operaciones entre vectores
La suma y resta de vectores se realiza componente a
componente:
~ =P
~1 P
~2
P
(x, y ) = (x1 x2 , y1 y2 )
p
~ = x 2 + y 2.
La longitud o norma de un vector es |P|
~1 y P
~ 2 es |P
~1 P
~ 2|
La distancia eucldea entre dos puntos P
El producto escalar de dos vectores es un n
umero, y se define
como
~1 P
~ 2 := x1 x2 + y1 y2 = |P
~ 1 ||P
~ 2 | cos
P
Observar que es la proyecci
on de un vector sobre otro, y en
particular si = 90 el producto escalar se anula.
Training Camp Argentina 2013
Observar que
~1 P
~ 2 | = |P
~ 1 ||P
~ 2 | sin ,
|P
es decir el area del paralelogramo formado por los vectores y
sus traslaciones paralelas.
En particular si = 0
o = 180 el producto vectorial se
anula.
s t r u c t pt {
double x , y ;
p t ( d o u b l e xx = 0 . 0 , d o u b l e yy =0.0) { x=xx ; y=yy ; }
};
p t o p e r a t o r +( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n p t ( p1 . x+p2 . x , p1 . y+p2 . y ) ; }
p t o p e r a t o r ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n p t ( p1 . xp2 . x , p1 . yp2 . y ) ; }
d o u b l e o p e r a t o r ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n p1 . x p2 . x + p1 . y p2 . y ; }
d o u b l e o p e r a t o r ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n p1 . x p2 . y p1 . y p2 . x ; }
d o u b l e norm ( c o n s t p t &p ) { r e t u r n s q r t ( pp ) ; }
d o u b l e d i s t ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n norm ( p1p2 ) ; }
Lneas y segmentos
Una lnea o un segmento se pueden representar de varias formas
distintas:
~1 y P
~ 2 sobre la lnea (los extremos del
Con dos puntos P
segmento)
~ 0 sobre la lnea y un vector director V
~
Con un punto P
Mediante una ecuaci
on implcita ax + by + c = 0.
Se puede pasar de una a otra representaci
on trivialmente, y la
eleccion de una u otra depende en definitiva del uso que se vaya a
darle.
n
o
~
~
La representacion P0 , V se conoce como parametrica, porque
nos permite recorrer todos los puntos de la lnea o segmento con
(
tR
lnea
~
~ 0 + tV
~
P(t)
=P
con
t [0, 1] segmento
Training Camp Argentina 2013
struct line {
double a , b , c ;
l i n e ( d o u b l e aa = 0 . 0 , d o u b l e bb = 0 . 0 , d o u b l e c c =0.0) {
a=aa ; b=bb ; c=c c ;
}
};
d o u b l e d i s t ( c o n s t p t &p , c o n s t l i n e & l ) {
r e t u r n ABS( l . a p . x+l . bp . y+l . c ) / s q r t (SQ( l . a )+SQ( l . b ) ) ; }
line
l i n e p p ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n l i n e ( p2 . yp1 . y , p1 . xp2 . x , p2 p1 ) ; }
line
l i n e p e r p p ( c o n s t l i n e &l , c o n s t p t &p ) {
r e t u r n l i n e ( l . b , l . a , l . bp . x l . a p . y ) ; }
line
m e d i a t r i z ( c o n s t p t &p1 , c o n s t p t &p2 ) {
r e t u r n l i n e p e r p p ( l i n e p p ( p1 , p2 ) , ( p1+p2 ) / 2 . 0 ) ; }
line
}
int
~ 0 = (a, b, c)
para N
~0 N
~0
d = P
~ 1, N
~ 1 } y {P
~ 2, N
~ 2 } se
En general, dos planos definidos por {P
intersecan para dar una lnea. C
omo la hallamos?
0
2
0
0 xN1 xN2
x
0
0
2
0 yN1 yN2
0
2 zN1 zN2
z = 0
~
~
xN yN zN
0
0
1
P1 N1
1
1
1
~2 N
~2
xN2 yN2 zN2 0
0
2
P
Training Camp Argentina 2013
Gracias!