exemplary code for fern drawing
int n,c;
double x,y,r,w,x1,y1;
x = 1 / sqrt(2.0);
y = x;
for(n = 0; n < 256000; n++) {
c = 2 * (n % 2) - 1;
r = sqrt(x*x + y*y);
w = atan2(y,x);
x = r * cos(w - c * M_PI / 12.0);
y = r * sin(w - c * M_PI / 12.0);
int tmp = rand() % 100;
if(tmp<77) {
x1 = 0.85 * x + 0.04 * y;
y1 = -0.04 * x + 0.85 * y + 1.6;
}
else if(tmp<88) {
x1 = 0.2 * x - 0.26 * y;
y1 = 0.23 * x + 0.22 * y + 1.6;
}
else if(tmp<99) {
x1 = -0.15 * x + 0.28 * y;
y1 = 0.26 * x + 0.24 * y + 0.44;
}
else {
x1 = 0;
y1 = 0.16 * y;
}
x = x1;
y = y1;
SetPixel(hdc,(int)(x * cx/8.0 + cx/2),(int)(y * cy/10.0),RGB(0,200,0));
}
based on http://astronomy.swin.edu.au/~pbourke/fractals/ifs_fern_a/roger11.c
hdc - display context handle, cx - width, cy - height