Está en la página 1de 26

Geometrı́a para ICPC

Training Camp Argentina 2013

Fidel I. Schaposnik (UNLP) - fidel.s@gmail.com


19 de julio de 2013
Contenidos

Introducción
Representación de objetos fundamentales
Puntos y vectores
Lı́neas y segmentos
Problemas lineales en geometrı́a computacional
Ecuaciones implı́citas
Intersección de planos en 3D
Técnicas de barrido
A Safe Bet
November Rain
Problemas para practicar

Training Camp Argentina 2013 Geometrı́a para ICPC


Introducción

¿En qué consiste un problema de geometrı́a computacional?


Generalmente, los problemas de geometrı́a en el ICPC requieren
calcular alguna cantidad (e.g. distancia, área, parámetros óptimos
para una configuración determinada, etc) relacionada con
elementos geométricos como puntos, lı́neas, cı́rculos, y demás. La
solución de un problema de geometrı́a involucra dos pasos:
1 Representar los objetos geométricos involucrados en el
problema, de modo de poder operar con ellos.
2 Desarrollar un algoritmo utilizando lo anterior para calcular la
respuesta buscada.

Para poder dedicarnos a la parte “interesante”, debemos primero


asegurarnos de que el primer punto no es un impedimento.

Training Camp Argentina 2013 Geometrı́a para ICPC


Introducción (cont.)

A FAVOR: Podemos visualizar los algoritmos fácilmente.


EN CONTRA: Debemos evitar nuevos tipos de problemas (errores
numéricos, casos degenerados, código más largo, etc).

Training Camp Argentina 2013 Geometrı́a para ICPC


Introducción (cont.)

A FAVOR: Podemos visualizar los algoritmos fácilmente.


EN CONTRA: Debemos evitar nuevos tipos de problemas (errores
numéricos, casos degenerados, código más largo, etc).
Antes de empezar, algunas consideraciones generales
A lo largo de esta clase nos vamos a concentrar casi
exclusivamente en problemas de geometrı́a en 2D.

La práctica y las buenas costumbres son todavı́a más


importantes que en los problemas “convencionales”.

¡Los problemas de geometrı́a muchas veces sirven para


distinguir a los buenos equipos de los excelentes!

Training Camp Argentina 2013 Geometrı́a para ICPC


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
P ~1 ± P
~2 ⇐⇒ (x, y ) = (x1 ± x2 , y1 ± y2 )
~ = x 2 + y 2.
p
La longitud o norma de un vector es |P|
La distancia euclı́dea entre dos puntos P ~1 y P~ 2 es |P
~1 − P
~ 2|
El producto escalar de dos vectores es un número, y se define
como
P~1 · P
~ 2 := x1 x2 + y1 y2 = |P
~ 1 ||P
~ 2 | cos θ
Observar que es la proyección de un vector sobre otro, y en
particular si θ = 90◦ el producto escalar se anula.
Training Camp Argentina 2013 Geometrı́a para ICPC
Puntos y vectores (cont.)

El producto vectorial de dos vectores es un vector en la


dirección normal al plano generado por ellos. En dos
dimensiones nos puede interesar su única componente no nula,
 
~1 × P
P ~ 2 = x1 y2 − x2 y1 ≡ P
~1 ∧ P
~2
z

Observar que
~1 × P
|P ~ 2 | = |P
~ 1 ||P
~ 2 | sin θ,

es decir el área del paralelogramo formado por los vectores y


sus traslaciones paralelas.
En particular si θ = 0◦ ó θ = 180◦ el producto vectorial se
anula.

Training Camp Argentina 2013 Geometrı́a para ICPC


Puntos y vectores (código.)
1 s t r u c t pt {
2 double x , y ;
3 p t ( d o u b l e xx = 0 . 0 , d o u b l e yy =0.0) { x=xx ; y=yy ; }
4 };
5
6 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 ) {
7 r e t u r n p t ( p1 . x+p2 . x , p1 . y+p2 . y ) ; }
8
9 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 ) {
10 r e t u r n p t ( p1 . x−p2 . x , p1 . y−p2 . y ) ; }
11
12 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 ) {
13 r e t u r n p1 . x ∗ p2 . x + p1 . y ∗ p2 . y ; }
14
15 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 ) {
16 r e t u r n p1 . x ∗ p2 . y − p1 . y ∗ p2 . x ; }
17
18 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 ( p∗p ) ; }
19
20 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 ) {
21 r e t u r n norm ( p1−p2 ) ; }

Estructura y operaciones elementales con puntos


Training Camp Argentina 2013 Geometrı́a para ICPC
Lı́neas y segmentos
Una lı́nea o un segmento se pueden representar de varias formas
distintas:
~1 y P
Con dos puntos P ~ 2 sobre la lı́nea (los extremos del
segmento)
~ 0 sobre la lı́nea y un vector director V
Con un punto P ~

Mediante una ecuación implı́cita ax + by + c = 0.


Se puede pasar de una a otra representación trivialmente, y la
elección de una u otra depende en definitiva del uso que se vaya a
darle.
n o
~ ~
La representación P0 , V se conoce como paramétrica, porque
nos permite recorrer todos los puntos de la lı́nea o segmento con
(
~ ~ 0 + tV~ t∈R lı́nea
P(t) =P con
t ∈ [0, 1] segmento
Training Camp Argentina 2013 Geometrı́a para ICPC
Lı́neas y segmentos (cont.)

1 struct line {
2 double a , b , c ;
3 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) {
4 a=aa ; b=bb ; c=c c ;
5 }
6 };
7
8 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 ) {
9 r e t u r n ABS( l . a ∗p . x+l . b∗p . y+l . c ) / s q r t (SQ( l . a )+SQ( l . b ) ) ; }
10
11 line l i n e p p ( c o n s t p t &p1 , c o n s t p t &p2 ) {
12 r e t u r n l i n e ( p2 . y−p1 . y , p1 . x−p2 . x , p2 ˆ p1 ) ; }
13
14 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 ) {
15 r e t u r n l i n e (− l . b , l . a , l . b∗p . x − l . a ∗p . y ) ; }
16
17 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 ) {
18 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 ) ; }

Ejemplo de uso de la representación implı́cita

Training Camp Argentina 2013 Geometrı́a para ICPC


Lı́neas y segmentos (cont.)
1 line b i s e c t r i z ( c o n s t p t &p1 , c o n s t p t &pc , c o n s t p t &p2 ) {
2 p t pc1 = p1−pc , pc2 = p2−pc ;
3
4 i f (ABS( pc1 ˆ pc2 ) < EPS ) {
5 i f ( pc1 ∗ pc2 > ZERO) r e t u r n l i n e p p ( pc , p1 ) ;
6 e l s e r e t u r n l i n e p e r p p ( l i n e p p ( p1 , p2 ) , pc ) ;
7 }
8 r e t u r n l i n e p p ( pc , pc+( pc1 / norm ( pc1 )+pc2 / norm ( pc2 ) ) / 2 . 0 ) ;
9 }
10
11 int i n t e r l l ( c o n s t l i n e &l 1 , c o n s t l i n e &l 2 , p t &p ) {
12 d o u b l e d e t = l 1 . a ∗ l 2 . b − l 1 . b∗ l 2 . a ;
13
14 i f (ABS( d e t ) < EPS ) {
15 i f (ABS( l 1 . a ∗ l 2 . c − l 1 . c ∗ l 2 . a ) < EPS ) r e t u r n −1;
16 else return 0;
17 }
18 p . x = ( l 1 . b∗ l 2 . c − l 2 . b∗ l 1 . c ) / d e t ;
19 p . y = ( l 2 . a∗ l 1 . c − l 1 . a∗ l 2 . c ) / det ;
20 return 1;
21 }

Ejemplo de uso de la representación implı́cita (cont.)


Training Camp Argentina 2013 Geometrı́a para ICPC
Problemas lineales en geometrı́a computacional

A veces aparecen sistemas de ecuaciones en problemas de


geometrı́a computacional: Joe’s Triangular Gardens (NA-GNY’08)
pide hallar la elipse tangente a un triángulo en los puntos medios
de sus lados:

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas lineales en geometrı́a computacional

A veces aparecen sistemas de ecuaciones en problemas de


geometrı́a computacional: Joe’s Triangular Gardens (NA-GNY’08)
pide hallar la elipse tangente a un triángulo en los puntos medios
de sus lados:

Una elipse queda definida por ax 2 + bxy + cy 2 + dx + ey + f = 0


con b 2 − 4ac < 0, de modo que tenemos 5 parámetros que definen
la elipse (a, b, c, d, e y f , a menos de una normalización).

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas lineales en geometrı́a computacional (cont.)

~ m = (x m , y m ) con i = 1, 2, 3 son los puntos medios de los


Si P i i i
lados del triángulo, tenemos 3 ecuaciones de intersección

a(xim )2 + b xim yim + c(yim )2 + d xim + e yim + f = 0

y 2 ecuaciones de tangencia (derivando implı́citamente para dos


lados no verticales)

2a xim +b(yim +xim y 0 (xim , yim ))+2c yim y 0 (xim , yim )+d+ey 0 (xim , yim ) = 0

Los valores de las derivadas son simplemente las pendientes de los


correspondientes lados del trı́angulo: y 0 (xim , yim ) = ∆yi
∆xi .

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas lineales en geometrı́a computacional (cont.)

~ m = (x m , y m ) con i = 1, 2, 3 son los puntos medios de los


Si P i i i
lados del triángulo, tenemos 3 ecuaciones de intersección

a(xim )2 + b xim yim + c(yim )2 + d xim + e yim + f = 0

y 2 ecuaciones de tangencia (derivando implı́citamente para dos


lados no verticales)

2a xim +b(yim +xim y 0 (xim , yim ))+2c yim y 0 (xim , yim )+d+ey 0 (xim , yim ) = 0

Los valores de las derivadas son simplemente las pendientes de los


correspondientes lados del trı́angulo: y 0 (xim , yim ) = ∆yi
∆xi .

Si resolvemos el sistema de 5 ecuaciones con 5 incógnitas, la


solución al problema está prácticamente dada.

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas lineales en geometrı́a computacional (cont.)

Otro ejemplo: consideremos la intersección de dos planos en tres


dimensiones.

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas lineales en geometrı́a computacional (cont.)

Otro ejemplo: consideremos la intersección de dos planos en tres


dimensiones.
Un plano se define con un punto P~0 contenido en el plano y un
~ 0 ortogonal al mismo. Todos los otros puntos satisfacen
vector N
~ −P
(P ~ 0) · N
~0 = 0

lo cual conduce a la ecuación más familiar

ax + by + cz + d = 0 ~ 0 = (a, b, c)
para N y ~0 · N
d = −P ~0

~ 1, N
En general, dos planos definidos por {P ~ 1 } y {P
~ 2, N
~ 2 } se
intersecan para dar una lı́nea. ¿Cómo la hallamos?

Training Camp Argentina 2013 Geometrı́a para ICPC


Otros problemas lineales (cont.)
Usamos la representación paramétrica de la lı́nea, de modo que
buscamos un punto P~ sobre ella y un vector director V ~.

Training Camp Argentina 2013 Geometrı́a para ICPC


Otros problemas lineales (cont.)
Usamos la representación paramétrica de la lı́nea, de modo que
buscamos un punto P~ sobre ella y un vector director V ~.

Nuestra lı́nea debe pertenecer a ambos planos, luego es ortogonal


~1 y N
a los vectores N ~ 2 . Entonces
~ =N
V ~1 × N
~2
~ = ~0, los planos son paralelos y no hay intersección entre ellos.
Si V
¿Cómo hallamos P? ~

Training Camp Argentina 2013 Geometrı́a para ICPC


Otros problemas lineales (cont.)
Usamos la representación paramétrica de la lı́nea, de modo que
buscamos un punto P~ sobre ella y un vector director V ~.

Nuestra lı́nea debe pertenecer a ambos planos, luego es ortogonal


~1 y N
a los vectores N ~ 2 . Entonces
~ =N
V ~1 × N
~2
~ = ~0, los planos son paralelos y no hay intersección entre ellos.
Si V
¿Cómo hallamos P? ~

Sea P~ el punto sobre la lı́nea que está más cerca de cierto punto
~ = (x, y , z) minimiza
fijo y arbitrario (e.g. el origen). Entonces P
D2 = x2 + y 2 + z2
mientras está en ambos planos, i.e. satisfaciendo
   
~ −P
P ~1 · N
~1 = 0 y ~ −P
P ~2 · N~2 = 0

Training Camp Argentina 2013 Geometrı́a para ICPC


Otros problemas lineales (cont.)
Podemos hallar el punto P ~ minimizando D 2 bajo estas
restricciones, usando multiplicadores de Lagrange. Definimos
   
f (x, y , z, µ1 , µ2 ) = x 2 +y 2 +z 2 +µ1 P~ −P
~ 1 ·N
~ 1 +µ2 P~ −P
~ 2 ·N
~2

Luego debemos exigir


∂f ∂f ∂f
= 2x+µ1 xN1 = 0 = 2y +µ1 yN1 = 0 = 2z+µ1 zN1 = 0
∂x ∂y ∂z
∂f 
~ −P

~1 · N
~1 = 0 ∂f 
~ −P

~2 · N
~2 = 0
= P = P
∂µ1 ∂µ2

Training Camp Argentina 2013 Geometrı́a para ICPC


Otros problemas lineales (cont.)
Podemos hallar el punto P ~ minimizando D 2 bajo estas
restricciones, usando multiplicadores de Lagrange. Definimos
   
f (x, y , z, µ1 , µ2 ) = x 2 +y 2 +z 2 +µ1 P~ −P
~ 1 ·N
~ 1 +µ2 P~ −P
~ 2 ·N
~2

Luego debemos exigir


∂f ∂f ∂f
= 2x+µ1 xN1 = 0 = 2y +µ1 yN1 = 0 = 2z+µ1 zN1 = 0
∂x ∂y ∂z
∂f 
~ −P

~1 · N~1 = 0 ∂f 
~ −P

~2 · N ~2 = 0
= P = P
∂µ1 ∂µ2
O, en notación matricial
0
    
2 0 0 xN1 xN2 x
 0 2 0 yN1 yN2     0 
  y   
z = 0 
 0 0 2 zN1 zN2     
~ ~

xN yN zN
1 1 1 0 0   µ1   P1 · N1 
xN2 yN2 zN2 0 0 µ2 ~2 · N
P ~2

Training Camp Argentina 2013 Geometrı́a para ICPC


Técnicas de barrido: A Safe Bet

Training Camp Argentina 2013 Geometrı́a para ICPC


Técnicas de barrido: November Rain

Training Camp Argentina 2013 Geometrı́a para ICPC


Problemas para practicar

In-circles Again - LA 4714


Shortest Flight Path - LA 6035
Coverage - LA 4562
Malfatti Circles - LA 4642
Onion Layers - LA 3655
Deer-Proof Fence - LA 4450
Watering Plants - GCJ 2009, Round 2
High Mountains - SPOJ TAP2012H
Garden Fence - LA 5795

Training Camp Argentina 2013 Geometrı́a para ICPC


¡Gracias!

Training Camp Argentina 2013 Geometrı́a para ICPC

También podría gustarte