#!/usr/bin/perl use strict; use warnings; require "ballmech.pm"; #require "draw.pm"; use CGI qw(:standard); use List::Util qw(sum); my @pattern = qw(6 3 3); my $even = (scalar(@pattern)+1)%2; my $balls = sum(@pattern) / scalar(@pattern); if($balls =~ /0-9/) { die "siteswap invalid"; } if($even == 0) { push @pattern, @pattern; } my $length = scalar(@pattern); my $hands_width = 0.5; my $handabs = 1*($hands_width / 2); my $early = 0.6; our @throws; our @objects; my $frames = 5; my $hand = 1; my $target; for (my $i=0; $i<@pattern; $i++) { if($pattern[$i]%2 == 0) { $target = $handabs*$hand; } else { $target = -1*$handabs*$hand; } push (@throws, [$i, trajectory(0.5*$handabs*$hand, $target, ($pattern[$i]-$early)), $i+$pattern[$i]-$early]); $hand *= -1; } ## @objects: (0id, 1yposition, 2xposition, 3thrown, 4land, 5traa, 6trab, 7trac, 8trad, 9trae) ## @throws: (0throw, 1traa 2trab 3trac 4trad 5trae 6land) sub update(@) { my ($time) = shift(@_); print "$time "; for (my $k=0; $k<@main::objects; $k++) { ## catching to be added (splice) if(($main::objects[$k][4] - $time) < 1/$frames) { splice(@main::objects,$k,1); } $main::objects[$k][1] = (($time-$main::objects[$k][3])**2)*$main::objects[$k][5]/2 + ($time-$main::objects[$k][3])*$main::objects[$k][6] + $main::objects[$k][7]; $main::objects[$k][2] = ($time-$main::objects[$k][3])*$main::objects[$k][8] + $main::objects[$k][9]; print "$main::objects[$k][2] $main::objects[$k][1] "; } print "\n"; } sub throw(@) { if(int($main::throws[0][0]) == int($main::time)) { my $vars = shift(@main::throws); push (@main::objects, ["id", 0, ${$vars}[5], ${$vars}[0], ${$vars}[6], ${$vars}[1], ${$vars}[2], ${$vars}[3], ${$vars}[4], ${$vars}[5]]); } else { } } foreach(@throws) { # print join("\t",@$_) . "\n"; } print "\n"; our $time; for ($time=0; $time<$length*2; $time++) { throw($time); for (my $j=0; $j < $frames; $j++) { update($time+$j/$frames); # print " "; } } #push(@objects, [$start, $end, $height, $time, 0]); # foreach(@objects) { # update(); # } # draw(); #}