87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*----------------------------------------------------------------------+
 | 
						|
 |                                                                      |
 | 
						|
 |     gfxbrot.c -- demonstrate fractal in gfx / quick and dirty        |
 | 
						|
 |                                                                      |
 | 
						|
 +----------------------------------------------------------------------*/
 | 
						|
 
 | 
						|
// Standard includes
 | 
						|
#include <limits.h>
 | 
						|
#include <stdarg.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <assert.h>
 | 
						|
#include <string.h>
 | 
						|
#include <math.h>
 | 
						|
#include <gigatron/console.h>
 | 
						|
#include <gigatron/sys.h>
 | 
						|
 | 
						|
#define HEIGHT 120
 | 
						|
#define WIDTH 160
 | 
						|
#define SCALE 1.6
 | 
						|
#define YSTEP 1
 | 
						|
#define XSTEP 1
 | 
						|
 | 
						|
int mandelbrot(float x, float y) {
 | 
						|
 float zz;
 | 
						|
 float a;
 | 
						|
 float b;
 | 
						|
 float a2;
 | 
						|
 float b2;
 | 
						|
 float atemp;
 | 
						|
 int i;
 | 
						|
  
 | 
						|
  a = 0;
 | 
						|
  b = 0;  
 | 
						|
  i = 0;
 | 
						|
  while (i < 15)
 | 
						|
  {
 | 
						|
    a2 = a * a;
 | 
						|
    b2 = b * b;
 | 
						|
    zz = a2 + b2;
 | 
						|
    if(zz > 4) break;
 | 
						|
    
 | 
						|
    atemp = a2 - b2 + x;
 | 
						|
    b = 2.0 * a * b + y;
 | 
						|
    a = atemp;
 | 
						|
    i++;
 | 
						|
  }
 | 
						|
  return i;
 | 
						|
}
 | 
						|
 | 
						|
void drawPixel(int x, int y, int color)
 | 
						|
{
 | 
						|
  screenMemory[y][x] = color;
 | 
						|
}
 | 
						|
 | 
						|
void main(void) {
 | 
						|
  int x, y, data;
 | 
						|
  int col[16];
 | 
						|
  float sx, sy;
 | 
						|
  
 | 
						|
  col[0] = 0x01;
 | 
						|
  col[1] = 0x02;
 | 
						|
  col[2] = 0x03;
 | 
						|
  col[3] = 0x07;
 | 
						|
  col[4] = 0x0b;
 | 
						|
  col[5] = 0x0f;
 | 
						|
  col[6] = 0x0e;
 | 
						|
  col[7] = 0x0d;
 | 
						|
  col[8] = 0x0c;
 | 
						|
  col[9] = 0x3c;
 | 
						|
  col[10] = 0x38;
 | 
						|
  col[11] = 0x34;
 | 
						|
  col[12] = 0x30;
 | 
						|
  col[13] = 0x20;
 | 
						|
  col[14] = 0x10;
 | 
						|
  col[15] = 0x00;
 | 
						|
   
 | 
						|
  for(y = 0; y < HEIGHT; y = y + YSTEP ) {
 | 
						|
    for(x = 0; x < WIDTH; x = x + XSTEP ) {
 | 
						|
      sx = -0.7 + (SCALE * (WIDTH/2.0 - x) / (WIDTH/2.0))*(-1);
 | 
						|
      sy = (SCALE * (HEIGHT/2.0 - y) / (HEIGHT/2.0))*(-0.75);
 | 
						|
      data = mandelbrot(sx, sy);
 | 
						|
      drawPixel(x,y,col[data]);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |