The following example produces Lissajou figures:
#!/usr/bin/perl use Spectra; use GQE; $r_max = 10000; ($fx, $fy, $np, $par) = @ARGV; $fx = $fx || 2; $fy = $fy || 3; $par = $par || (0.01*sqrt(sqrt($fx+$fy))); $np = $np || 101; Spectra::delete("*.*"); Spectra::set( "raise off"); Spectra::set( "cif off"); # change-input-focus to off Spectra::cls(); print "\033[5;1f Usage:\n\n"; print " TScan.pl fx fy np par \n\n"; print " Examples: \n"; print " TScan.pl 4 5 \n"; print " TScan.pl 9 10 201\n"; print " TScan.pl 7 8 201 0.01 \n\n"; print " Press the space bar to terminate the loop \n"; $t1 = SCAN->create( name => t1, start => -1, stop => 1, np => $np) or die "Failed to create t1 "; $t2 = SCAN->create( name => t2, start => -1, stop => 1, np => $np) or die "Failed to create t2 "; Spectra::autoscale(); #($user, $system, $cuser, $csystem) = times; $start = (times)[0]; $pi = Gra_decode_double( "4.*atan(1.)"); $f1 = 2*$pi/($np-3); for $r (0 .. $r_max ) { for $i (0 .. ($np - 1)) { $t1->{x}[$i] = cos($fx*($f1*$i+$r*$par)); $t1->{y}[$i] = sin($fy*($i*$f1 + 0*($r+0.5)*$par)); } $t2->set( colour => 'white'); $t1->set( colour => 'black'); Spectra::display( over => 1); for $i (0 .. ($np - 1)) { $t2->{x}[$i] = cos($fx*($f1*$i+($r+0.5)*$par)); $t2->{y}[$i] = sin($fy*($i*$f1 + 0*($r+0.5)*$par)); } $t2->set( colour => 'black'); $t1->set( colour => 'white'); Spectra::display( over => 1); $let = Spectra::key(); last if( $let == 32); } $end = (times)[0]; printf "\n Time %.2f seconds \n", $end - $start;