gigatron/rom/Compilers/glcc/stuff/veekoo/gfxjulia.c
2025-01-28 19:17:01 +03:00

89 lines
1.7 KiB
C

/*----------------------------------------------------------------------+
| |
| gfxjulia.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.7
#define YSTEP 1
#define XSTEP 1
#define CX -0.8
#define CY 0.156
int julia(float x, float y) {
float zz;
float a;
float b;
float a2;
float b2;
float atemp;
int i;
a = x;
b = y;
i = 0;
while (i < 15)
{
a2 = a * a;
b2 = b * b;
zz = a2 + b2;
if(zz > 4) break;
atemp = a2 - b2 + CX;
b = 2.0 * a * b + CY;
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[14] = 0x01;
col[13] = 0x02;
col[12] = 0x03;
col[11] = 0x07;
col[10] = 0x0b;
col[9] = 0x0f;
col[8] = 0x0e;
col[7] = 0x0d;
col[6] = 0x0c;
col[5] = 0x3c;
col[4] = 0x38;
col[3] = 0x34;
col[2] = 0x30;
col[1] = 0x20;
col[0] = 0x10;
col[15] = 0x00;
for(y = 0; y < HEIGHT; y = y + YSTEP ) {
for(x = 0; x < WIDTH; x = x + XSTEP ) {
sx = (SCALE * (WIDTH/2.0 - x) / (WIDTH/2.0))*(-1);
sy = (SCALE * (HEIGHT/2.0 - y) / (HEIGHT/2.0))*(-0.75);
data = julia(sx, sy);
drawPixel(x,y,col[data]);
}
}
}