71 lines
1.4 KiB
C
71 lines
1.4 KiB
C
/*----------------------------------------------------------------------+
|
|
| |
|
|
| gfxbrotx.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 < 63)
|
|
{
|
|
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;
|
|
float sx, sy;
|
|
|
|
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);
|
|
col = 63 - data;
|
|
drawPixel(x,y,col);
|
|
}
|
|
}
|
|
}
|