#!/usr/local/bin/cz --

Main()
	paper(1280, 800, black)

	let(dt, angle2rad(1))
	dt = dt

	int R = hypot(1280/2, 800/2)

	int *a = Nalloc(int, (R*2+1) * (R*2+1))
	int *d = Nalloc(int, (R*2+1) * (R*2+1))
#	int a[R*2+1][R*2+1]
#	int d[R*2+1][R*2+1]
	colour rb[360]
	int np[R*2+1]

	for(i, 0, 360)
		rb[i] = rainbow(i)

	for(y, -R, R)
		let(X, (int)notpot(R, y))
		np[y+R] = X
		for(x, -X, X)
#			d[x+R][y+R] = hypot(x, y)
			d[ix(x,y)] = hypot(x, y)
			let(A, Atan2(y, x))
#			a[x+R][y+R] = mod(((int)A), 360)
			a[ix(x,y)] = mod(((int)A), 360)

	let(da, 0.0)

	int first = 1
	wheel()
	Paint()
	Rsleep(3)

	first = 0

	repeat
		wheel()
		Paint()
		#spin()
		#da -= 5
		da -= 8
		first = 0

def ix(x,y) (x+R) + (y+R) * (R*2+1)

def wheel()
	.
#		for(i, 0, 360)
#			rb[i] = rainbow(i)
		for(y, -R, R)
			let(X, np[y+R])
			for(x, -X, X)
				if Rand() < 0.02 || first
#					let(A, (a[x+R][y+R] + d[x+R][y+R]))
					let(A, (a[ix(x,y)] + d[ix(x,y)]))
					if toss() || first
						A = mod(A*2+da/2, 360)
					else
						A = mod(A*3+da, 360)
					col(rb[A])
					point(x, y)

def spin()
	rb_red_angle += 1.6*dt
	rb_green_angle += 2*dt
	rb_blue_angle += -1*dt

use main
use m
use gr
use error
use time
use io
