terça-feira, 23 de dezembro de 2014

O Caderno...

Tenho, uma página no meu site pessoal, onde apresento alguns pdf's com minitextos meus...
Num desses pdf (Casio1999.pdf) tenho vários programas para calculadoras, (por exemplo os jogos Batalha Naval e CPmissil).
No entanto, nesse pdf está apenas o código não comentado dos programas (pois, as calculadoras têm um limite de memória que na altura me fazia tentar escrever o mínimo possível).
Transportei ambos os jogos para calculadoras recentes, (Nomeadamente, máquinas Casio fx-9860 e casio-Fx-CG20) E preparo-me para escrever versões mais recentes de ambos os programas no sdk oficial da Casio para a FX9860-G.
Ainda não está nos meus planos uma versão nova para CG-20, embora se justificasse (Nesta calculadora os jogos conseguem ser mais lentos do que para as calculadoras em que foram programados originalmente)

Na altura, quando escrevi os programas, tinha um caderno onde tomava registo de todos os raciocínios e variáveis , pois, naquelas máquinas todas as variáveis são globais, e portanto esse tipo de cuidado era necessário... Se o caderno ainda existir, um dia, deixo uma nova versão, dedicada ao pessoal que quiser aprender a programar coisas simples ou com uma complexidade limitada, na calculadora.
[Nessa altura, posso ainda transportar alguns dos programas para TI-83/84plus..]

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á...
Este blog recusa-se a utilizar o Acordo Ortográfico de 1990