Mon 14 Oct 23:09:15 CEST 2024
This commit is contained in:
parent
dcc2d7b3d0
commit
64e5d90a02
79
user/fractal.c
Normal file
79
user/fractal.c
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2016-2019 The University of Notre Dame
|
||||||
|
This software is distributed under the GNU General Public License.
|
||||||
|
See the file LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "library/syscalls.h"
|
||||||
|
#include "library/string.h"
|
||||||
|
#include "library/nwindow.h"
|
||||||
|
|
||||||
|
#define MAX_ITERS 2000
|
||||||
|
|
||||||
|
int in_set( float x, float y );
|
||||||
|
void plot_point(int iter, int j, int k);
|
||||||
|
|
||||||
|
struct nwindow *nw = 0;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
/* Setup the window */
|
||||||
|
nw = nw_create_default();
|
||||||
|
|
||||||
|
int xsize = nw_width(nw);
|
||||||
|
int ysize = nw_height(nw);
|
||||||
|
|
||||||
|
nw_clear(nw,0,0,xsize,ysize);
|
||||||
|
|
||||||
|
float xlow = -2.0;
|
||||||
|
float ylow = -1.5;
|
||||||
|
float xfactor = 2.5/xsize;
|
||||||
|
float yfactor = 3.0/ysize;
|
||||||
|
|
||||||
|
|
||||||
|
/* For each point, see if it is in the Mandelbrot set */
|
||||||
|
int iter,i,j;
|
||||||
|
|
||||||
|
for(i=0;i<xsize;i++) {
|
||||||
|
for(j=0;j<ysize;j++) {
|
||||||
|
float x = i*xfactor + xlow;
|
||||||
|
float y = j*yfactor + ylow;
|
||||||
|
iter = in_set(x,y);
|
||||||
|
plot_point(iter,i,j);
|
||||||
|
nw_flush(nw);
|
||||||
|
}
|
||||||
|
syscall_process_yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int in_set( float x0, float y0 )
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
float x=x0;
|
||||||
|
float y=y0;
|
||||||
|
|
||||||
|
while( x*x + y*y < 4 && i<MAX_ITERS) {
|
||||||
|
float t = x*x - y*y + x0;
|
||||||
|
y = 2*x*y + y0;
|
||||||
|
x = t;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void plot_point(int iter, int j, int k)
|
||||||
|
{
|
||||||
|
if(iter==MAX_ITERS) {
|
||||||
|
nw_fgcolor(nw,0,0,0);
|
||||||
|
} else {
|
||||||
|
int color[3];
|
||||||
|
color[0] = iter % 256;
|
||||||
|
color[1] = iter*3 % 256;
|
||||||
|
color[2] = iter*7 % 256;
|
||||||
|
nw_fgcolor(nw,color[0],color[1],color[2]);
|
||||||
|
}
|
||||||
|
nw_rect(nw,j,k,1,1);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user