0votos

Test rápido de intersección entre dos únicos círculos (I) en Haskell

por josejuan hace 5 años

La estrategia óptima, depende de la probabilidad con que ocurran ciertos sucesos.

Implementar la estrategia más eficiente (en tiempo) posible cuando se trata de detectar si dos círculos en movimiento colisionan.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- Si la probabilidad de colisión es alta, será mejor hacer directamente 
testCircleCircle (x1, y1) (x2, y2) r2 = dx^2 + dy^2 <= r2 
  where dx = x1 - x2 
            dy = y1 - y2 
 
 
-- Si la probabilidad de colisión no es alta, será mejor prechequear las cajas 
testCircleCircle' (x1, y1) (x2, y2) rr r2 =  -rr < dx && dx < rr && 
                                                            -rr < dy && dy < rr && 
                                                            dx^2 + dy^2 <= r2 
  where dx = x1 - x2 
            dy = y1 - y2 
 
-- si la probabilidad de las posiciones relativas de los círculos NO es uniforme, 
-- el orden del "bound check" es importante según el cuadrante más probable. 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.