home *** CD-ROM | disk | FTP | other *** search
- //
-
- //+------------------------------------------------------------------+
-
- //+ Program KAMTORUS.CPP, version 0.2 +
-
- //+ Plots *hundreds* of Kamtorus fractals. +
-
- //+ (when you think it's all over... a new one is produced!) +
-
- //+ +
-
- //+ By Ramiro Perez (Panama), RPEREZ@UTPVM1.BITNET +
-
- //+ and Fausto A. A. Barbuto (Brazil), BJ06@C53000.PETROBRAS.ANRJ.BR +
-
- //+ April 9, 1994. +
-
- //+ +
-
- //+ Press any key to stop execution or PAUSE to freeze. +
-
- //+ SVGA256 version; supports up to five video screens. +
-
- //+ Authorized version for spanky.triumf.ca site. +
-
- //+------------------------------------------------------------------+
-
- //
-
- #include <time.h>
-
- #include <graphics.h>
-
- #include <math.h>
-
- #include <conio.h>
-
- #include <stdlib.h>
-
- #include <stdio.h>
-
- #include "Svga256.h"
-
-
-
- int Vid; //Global variable
-
-
-
- int huge DetectSVGA256()
-
- {
-
- printf("\nWhich video mode would you like to use? \n\n");
-
- printf(" 0 - 320x200x256\n");
-
- printf(" 1 - 640x400x256\n");
-
- printf(" 2 - 640x480x256\n");
-
- printf(" 3 - 800x600x256\n");
-
- printf(" 4 - 1024x768x256\n\n>");
-
- scanf("%d",&Vid);
-
- if((Vid<0) || (Vid)>4) Vid = 2;
-
- return Vid;
-
- }
-
-
-
- void main(void)
-
- {
-
- int a, c, nx, ny;
-
- time_t t;
-
- unsigned long k;
-
- double an, can, san, can1, san1, e, r, ax, ay;
-
- double x, xa, x1, x2, x3, y, y1, y2, y3, rand1, rand2;
-
- int graphdriver=DETECT, graphmode;
-
-
-
- clrscr();
-
- printf("\n Program KAMTORUS.CPP \n\n");
-
- installuserdriver("Svga256",DetectSVGA256);
-
- initgraph(&graphdriver,&graphmode,"C:\\BORLANDC\\BGI");
-
-
-
- if (Vid == 0) { nx = 160; ny = 100; ax = 200.; ay = ax;}
-
- if (Vid == 1) { nx = 320; ny = 200; ax = 300.; ay = ax;}
-
- if (Vid == 2) { nx = 320; ny = 240; ax = 400.; ay = ax;}
-
- if (Vid == 3) { nx = 400; ny = 300; ax = 750.; ay = ax;}
-
- if (Vid == 4) { nx = 512; ny = 359; ax = 1000.; ay = ax;}
-
- if ((Vid>4) || (Vid<0)) { nx = 320; ny = 240; ax = 400; ay = ax;}
-
-
-
- do {
-
- cleardevice();
-
- c = 1;
-
- srand((unsigned) time(&t));
-
- rand1 = random(20000);
-
- rand2 = random(20000);
-
- rand1 = 5.0e-5*rand1;
-
- rand2 = 5.0e-5*rand2;
-
- an = 10.0*(rand1-rand2);
-
- can = 0.99*cos(an);
-
- san = 0.99*sin(an);
-
- can1 = 1.01*cos(an);
-
- san1 = 1.01*sin(an);
-
- for (a=1;a<=256;a++) setpalette (a,(int)(0.0128*random(20000)));
-
- x3 = 0.01;
-
- y3 = 0.01;
-
- do {
-
- xa = x3*x3 - y3;
-
- x2 = x3*can1 + xa*san1;
-
- y2 = x3*san1 - xa*can1;
-
- x3 = x2;
-
- y3 = y2;
-
- x = x2;
-
- y = y2;
-
- a = 0;
-
- do {
-
- xa = x*x - y;
-
- x1 = x*can + xa*san;
-
- y1 = x*san - xa*can;
-
- x = x1;
-
- y = y1;
-
- a++;
-
- putpixel((int)(ax*x+nx),(int)(ay*y+ny),c);
-
- } while ((fabs(x1)<=2.0e3) && (fabs(y1)<=2.0e3) && a<=100);
-
- e = e + 0.075;
-
- c = (int)e % 5 + 1;
-
- } while ((fabs(x2) <= 2.0e3) && (fabs(y2) <= 2.0e3));
-
- //*
-
- // Change "k" to increase/decrease time delay between each plot.
-
- // In a DX2-66 k(max)=5000000 produces a time delay of 2-3 seconds.
-
- //*
-
- for (k=0;k<=5000000;k++);
-
- } while (!kbhit());
-
- closegraph();
-
- }
-
-