/**
**/

:-object sine : [bcilib].

var url = 'sine.wrl'.
var lower = -6.2832 , upper = 6.2832 .	%% 2 * PI
var total = 30.	%% total number of spheres

	main :-
		loadURL(url),
		sleep(3000),
		format('main running~n'),
		sine_init(50).

	sine_init(Delay) :-
		AX is (upper - lower) / (total - 1),
		BX is lower - AX,
		sine_loop(1, Delay, AX, BX).

	sine_loop(total, Delay, A, B) :-
		!,
		sphere_init(total, Delay, A, B).
	sine_loop(I, Delay, A, B) :-
		sphere_init(I, Delay, A, B),
		N is I + 1,
		sine_loop(N, Delay, A, B).

	sphere_init(I, Delay, A,B) :-
		position(I, A, B, X,Y,C),
		atom_number(Xtext, X),
		atom_number(Ytext, Y),
		atom_number(Ctext, C),

		atom_list_concat( [
			'   SphereTransform {',
			'     radius 0.1',
			'     translation ', Xtext, ' ', Ytext, ' 0.0',
			'     diffuseColor 0.8  0.8 ', Ctext,
			'   }'
		] , NodeDef),

		createVrmlFromString(NodeDef, 'ROOT', [_NodeRef]),
		sleep(Delay).

	position(I, A, B, X,Y,C) :-
		X is A * I + B,
		Y is sin(X),
		C is abs(Y).

:-end_object sine.

/**
**/