I don't know how many people are aware of Ken Silverman's very cool
Evaldraw program; it's a sort of cross between a C programming environment and a graphing package (with real-time compilation!) that can output in 1D (as sound, even), 2D or 3D (voxels), as well as "0D" for more classic programming techniques (2D pixel plotting, OpenGL, ...)
I know we usually promote Python as a beginner's language (thanks to its interactive feedback); maybe this program is worth a look too?
It comes with tons of samples, but I threw together a few of my own as a test. [smile] It looks like it'll come in handy for prototyping...
(x,y,t) {
t *= 0.3;
x *= 0.5;
y *= 0.5;
dx0 = x-sin(t*3);
dy0 = y-cos(t*2);
dx1 = x-sin(t*7);
dy1 = y-cos(t*5);
dx2 = x-sin(t*4);
dy2 = y-cos(t*5);
b0 = dx0*dx0+dy0*dy0;
b1 = dx1*dx1+dy1*dy1;
b2 = dx2*dx2+dy2*dy2;
return 1.3-(b0*b1*b2);
}
(x,y,t,&r,&g,&b) {
// Offset (x,y).
x += sin(t * 0.5);
y += cos(t * 0.7);
// Grab the picture dimensions.
pic_w = 0; pic_h = 0;
getpicsiz(pic_w, pic_h);
// Calculate the angle:
angle = atan2(x, y) * (pic_w / pi) * 3;
// Calculate the depth:
depth = 80 / (x * x + y * y);
// Look up pixel from tunnel wall:
pic(angle + t * 5, depth + t * 10, r, g, b);
// Darkness from depth:
depth = 10 * sqrt(depth) - 10;
r -= depth;
g -= depth;
b -= depth;
}
(x,y,t,&r,&g,&b){
a = t / 10;
z = 20 * (1.2 + cos(t));
dx = z * cos(a);
dy = z * sin(a);
ix = x - dy * y + dx * x;
iy = y + dx * y + dy * x;
pic(ix, -iy, r, g, b);
}
(x,y,z,t,&r,&g,&b){
t *= 0.4;
dx0 = (x - sin(t * 3));
dy0 = (y - cos(t * 2));
dz0 = (z - cos(t * 2));
dx1 = (x - cos(t * 2));
dy1 = (y - sin(t * 5));
dz1 = (z - cos(t * 3));
dx2 = (x - cos(t * 2));
dy2 = (y - cos(t * 3));
dz2 = (z - sin(t * 5));
b0 = dx0 * dx0 + dy0 * dy0 + dz0 * dz0;
b1 = dx1 * dx1 + dy1 * dy1 + dz1 * dz1;
b2 = dx2 * dx2 + dy2 * dy2 + dz2 * dz2;
r = 255 - b0 * 255;
g = 255 - b1 * 255;
b = 255 - b2 * 255;
return 1 - (b0 * b1 * b2);
}