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