#include #include #include #include "tools.h" float gauss(unsigned seed); void subdivide (int f1, int f2, float std); float Fh[257],ratio; char combination= 0x00; unsigned long int PATTERN=0xFFFFFFFF; unsigned int seed=3245; int LINEWIDTH = 1; main() { float scale=1000,h=.87,std; int i; while (seed != 0) { setMode(3); printf("Enter seed (0 to quit): "); scanf("%d",&seed); Fh[0] = gauss(seed) * scale; Fh[256] = gauss(0) * scale; ratio = pow(2,-h); std = scale*ratio; subdivide(0,256,std); setMode(16); for (i=0; i<256; i++) drawLine(2*i-260,Fh[i],2*(i+1)-260,Fh[i+1],15); PATTERN = 0x0F0F0F0F; drawLine(-260,0,252,0,15); PATTERN = 0xFFFFFFFF; getch(); } } void subdivide (int f1, int f2, float std) { int fmid; float stdmid; fmid = (f1 + f2)/2; if (( fmid != f1) && (fmid != f2)) { Fh[fmid] = (Fh[f1] + Fh[f2])/2.0 + gauss(0) * std; stdmid = std*ratio; subdivide(f1,fmid,stdmid); subdivide(fmid,f2,stdmid); } } float gauss(unsigned seed) { int k; float value,exponent,gauss; if (seed != 0) srand(seed); k = rand() - 16383; value = k/5461.0; exponent = -(value*value)/2.; gauss = .15915494*exp(exponent); k = rand(); if (k > 16383) gauss *= -1; return(gauss); }