This was my first attempt at exploring the Lorenz attractor. It simply plots the familiar x-z plane image of the attractor, along with each of the three variables on time axes.
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <vga.h> #define TIMESTEP 0.0001 #define VIDMODE G640x480x16 #define XSCALE 4 #define YSCALE 4 #define ZSCALE 4 #define TSCALE 20 void main() { double x1, y1, z1, x, y, z, t, dt; int xp, yp, tp=0, gxp, gyp, gzp; FILE *file; file=fopen("output", "w"); x1=(y1=(z1=(t=0.0001))); dt=TIMESTEP; vga_setmode(VIDMODE); vga_setcolor(1); vga_drawline(320,0,320,479); vga_drawline(0,240,639,240); vga_drawline(0,300,639,300); vga_drawline(0,380,639,380); vga_drawline(0,460,639,460); vga_setcolor(15); while(tp<639) { x=x1 + ( -10.0*x1 + 10.0*y1 ) * dt; y=y1 + ( 28.0*x1 - y1 - x1*z1 ) * dt; z=z1 + ( -(8/3)*z1 + x1*y1 ) * dt; t=t + dt; xp=320+(int)floor(XSCALE*x); yp=240-(int)floor(YSCALE*z); tp=(int)floor(TSCALE*t); if (tp>639) { tp=479; /* t=0.0;*/ } gxp=300-(int)floor(XSCALE*x/4); gyp=380-(int)floor(YSCALE*y/4); gzp=460-(int)floor(ZSCALE*z/4); /* vga_setcolor(0); vga_drawline(tp, 241, tp, 479); vga_setcolor(1); vga_drawpixel(tp,300); vga_drawpixel(tp,380); vga_drawpixel(tp,460); if (tp==320) vga_drawline(320,0,320,479);*/ vga_setcolor(15); vga_drawpixel(xp,yp); vga_drawpixel(tp,gxp); vga_drawpixel(tp,gyp); vga_drawpixel(tp,gzp); x1=x; y1=y; z1=z; /* fprintf(file, "%f %f %f %f\n", t, x, y, z);*/ } getchar(); fclose(file); }