/**
**/
:-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.
/**
**/