terça-feira, 9 de dezembro de 2014

Intersecção de Circunferências em coordenadas rectangulares
Parte 2: A circunferência e a recta (I)

Sejam C(x1,y1) e M(x2,y2). Pretendo determinar os pontos de intersecção das circunferências de centro C e raio R1 e de centro M e raio R2, se existirem.
Portanto, pretendo obter uma expressão para as soluções do sistema

{
   (x - x1)2 + (y - y1)2 = R21
   (x - x2)2 + (y - y2)2 = R2
                            2

Desenvolvendo as equações temos:

{
  x2 - 2xx1 +  x21 + y2 - 2yy1 + y21 = R21
  x2 - 2xx2 +  x22 + y2 - 2yy2 + y22 = R22

E subtraindo a segunda equação da primeira temos:

- 2x (x1 - x2 ) - 2y (y1 - y2) = R21 - x21 - y21 - R22 + x22 + y22

                             ----2    2   ----2    2
⇔ (x1 - x2 )x + (y1 - y2) y = OC----R-1 --OM---+--R2-
                                        2

Esta última equação, é a equação de uma recta r que contem os pontos da intersecção das circunferencias. A equação mostra-nos que a recta r é perpendicular a CM, pois um vector ortogonal à   recta é (x1 - x2;y1 - y2) Que é vector director de CM! Seguindo o exemplo que dei na primeira parte, para obter as coordenadas dos pontos de intersecção, se existirem, basta intersectar esta recta com uma das circunferências.

(          2          2     2
{  (x - x1) +  (y - y1)  = R 1 ----        -----
                              OC2  - R21 - OM  2 + R22
(  (x1 - x2)x + (y1 - y2)y =  ------------------------
                                         2

Resolver um sistema deste tipo é algo que até se faz bem... com números! Vamos lá espreitar o caso geral da intersecção de uma circunferência com uma recta:

(
{  ax + by + c = 0
   (x - xC )2 + (y - yC )2 = R2
(

   (
   {  by = - ax - c
⇔     (x - x  )2 + (y - y )2 = R2
   (        C           C

   (
   {  b(y - yC2) = - ax - c2- byC
⇔     (x - xC ) + (y - yC)  = R2
   (

   (
   {  b(y - yC ) = - (ax + byC + c)
⇔     b2(x - xC )2 + (ax + byC + c)2 = b2R2
   (

   (
   {  b(y - yC ) = - (ax + byC + c)
⇔     (a2 + b2)x2 + 2(abyC -  b2xC  + ac)x + b2x2C -  b2R2  + (byC + c)2 = 0
   (

   (
   |||  b(y - yC) = - (ax + byC + c)∘ -------------------------------(------------------------)-
   {      - (abyC -  b2xC + ac) ±   (abyC - b2xC + ac )2 - (a2 + b2) b2x2C - b2R2 + (byC +  c)2
⇔  |  x = ------------------------------------------------------------------------------------
   ||(                                            a2 + b2

Não sei o leitor, mas a última equação já me dá alguma vontade de recorrer a um programa de computação algébrica, embora não sejam cálculos complicados.
No entanto como eu de vez em quando digo, quando se trata de implementação computacional, "por mais monstruosa que seja a fórmula...será o computador a tratar dela."
Note-se que no problema original da intersecção de circunferências o nosso a²+b² é o quadrado da distância entre os centros das circunferências.

Regressarei a este assunto, mas não para já...

2 comentários:

Anónimo disse...

Jorge Lourenço:

Sugiro aplicar uma tranlação seguida de uma rotação que coloque uma das circunferências com centro na origem e outra com centro no eixo das abcissas. A recta que passa pelos pontos de intersecção fica do tipo x=a (vertical). A intersecção com as circunferências fica fácil de determinar. No fim aplicam-se as transformações inversas.

Cumprimentos

Carlos Paulo disse...

:) E isso é (quase) a parte 3!

Este blog recusa-se a utilizar o Acordo Ortográfico de 1990