Autor Tema: Fractal2  (Leído 1976 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jgpeiro

  • PIC10
  • *
  • Mensajes: 24
Fractal2
« en: 27 de Febrero de 2006, 06:40:00 »

//*******************Fractal_2.h**********
int cc0i=0,ss0i=0,cc1i=0,ss1i=0;
int xmn=0, xmx=0,ymn=0,ymx=0;
unsigned int cnt=0;
void Fractal_2();
//**************Fractal_2.c******************

void fractal(int x, int y, char depth);
char orden;
void Fractal_2(){
   unsigned int i=0;
   gclcd_rect(0, 0, 131, 131, 1, 1, BLACK);
   while( usr_btn > 0x0F );   //While( button == 1);
   
   for ( i = 0 ; usr_btn < 0x0F ; i++ )   {

      float help = 0.78539816 + i / ( 128 / pi );
      cc0i = 16384 * 0.70710678 * cosf( help );
      ss0i = 16384 * 0.70710678 * sinf( help );

      help = 2.3561945 - i / ( 128 / pi );
      cc1i = (16384 * 0.70710678) * cosf( help );
      ss1i = (16384 * 0.70710678) * sinf( help );

      asm (" BSET   CORCON, #4"Giño;//ACCSAT
      asm (" BCLR   CORCON, #0"Giño;//IF
      asm (" BCLR   CORCON, #12"Giño;//US
      
      gclcd_rect(xmn, ymn, xmx, ymx, 1, 1, BLACK);

      xmn=131; xmx=0; ymn=131; ymx=0;
      orden=12;
      cnt=0;
      fractal( 0, 0, orden);
      }
   while( usr_btn > 0x0F );//Mientras button = 1.
   gclcd_cls();
}

void fractal(int x, int y, char depth ){
   int xb,yb;
   
   if (depth == 0)   {
      int x_act=(x>>9)+55;
      int y_act=(y>>9)+66;
      
      gclcd_pixel( x_act, y_act, (cnt<<(16-orden)) | (cnt&(0xFFFF>>orden) )   );
      cnt++;
      
      if (x_act < xmn)      xmn = x_act;
      else if (x_act > xmx)   xmx = x_act;
      if (y_act < ymn)      ymn = y_act;
      else if (y_act > ymx)   ymx = y_act;
      }
    else   {

      //x = ( x * cc0 - y * ss0 ),
      asm (" CLR   A "Giño;
      asm (" CLR   B "Giño;
      WREG4 = x;
      WREG5 = cc0i;
      asm (" MAC   w4*w5, A "Giño;// x * cc0
      asm (" SFTAC   A, #-2 "Giño;
      
      WREG4 = y;
      WREG5 = ss0i;
      asm (" MAC   w4*w5, B "Giño;// y * ss0
      asm (" SFTAC   B, #-2 "Giño;

      asm (" SUB   A "Giño;// A - B
      asm (" SAC.R   A, #1, w1"Giño;//
      xb=WREG1;
      
      //y = ( x * ss0 + y * cc0 )
      asm (" CLR   A "Giño;
      asm (" CLR   B "Giño;
      WREG4 = x;
      WREG5 = ss0i;
      asm (" MAC   w4*w5, A "Giño;// x * cc0
      asm (" SFTAC   A, #-2 "Giño;
      
      WREG4 = y;
      WREG5 = cc0i;
      asm (" MAC   w4*w5, B "Giño;// y * ss0
      asm (" SFTAC   B, #-2 "Giño;

      asm (" ADD   A "Giño;// A + B
      asm (" SAC.R   A, #1, w1"Giño;
      yb=WREG1;

      //      fractal( ( x * cc0 - y * ss0 ),
      //             ( x * ss0 + y * cc0 ), depth-1 );
      fractal( xb,yb, depth-1 );

      //x = ( x * cc1 - y * ss1 )
      asm (" CLR   A "Giño;
      asm (" CLR   B "Giño;
      WREG4 = x;
      WREG5 = cc1i;
      asm (" MAC   w4*w5, A "Giño;// x * cc0
      asm (" SFTAC   A, #-2 "Giño;
      WREG4 = y;
      WREG5 = ss1i;

      asm (" MAC   w4*w5, B "Giño;// y * ss0
      asm (" SFTAC   B, #-2 "Giño;

      asm (" SUB   A "Giño;// A - B
      asm (" SAC.R   A, #1, w1"Giño;//
      xb=WREG1;

      //y = ( x * ss1 + y * cc1 ),, +1   
      asm (" CLR   A "Giño;
      asm (" CLR   B "Giño;
      WREG4 = x;
      WREG5 = ss1i;
      asm (" MAC   w4*w5, A "Giño;// x * cc0
      asm (" SFTAC   A, #-2 "Giño;

      WREG4 = y;
      WREG5 = cc1i;
      asm (" MAC   w4*w5, B "Giño;// y * ss0
      asm (" SFTAC   B, #-2 "Giño;

      asm (" ADD   A "Giño;// A - B
      asm (" SAC.R   A, #1, w1"Giño;//
      yb=WREG1;

      //      fractal( ( x * cc1 - y * ss1 ) + 1,
      //             ( x * ss1 + y * cc1 ), depth-1 );
       fractal( xb + 16384, yb, depth - 1 );
   }
}


 

anything