#! perl -slw use strict; use Data::Dump qw[ pp ]; use GD; use constant { WHITE => unpack( 'N', pack 'CCCC', 0, 255, 255, 255 ), RED => unpack( 'N', pack 'CCCC', 0, 255, 0, 0 ), GREEN => unpack( 'N', pack 'CCCC', 0, 0, 255, 0 ), BLUE => unpack( 'N', pack 'CCCC', 0, 0, 0, 255 ), }; my( @x, @y, @yd1, @yd2 ); ( $x[@x], $y[@y], $yd1[@yd1], $yd2[@yd2] ) = map{ $_ //= 0 } split while ; chomp @yd2; $_ = ( $_ -4 ) * 1000 for @x; $_ /= 6 for @y; $_ = $_ / 320 + 400 for @yd1; $_ = $_ / 8000 + 400 for @yd2; my $im = GD::Image->new( 1000, 800, 1 ); $im->filledRectangle( 0, 0, 1000, 800, WHITE ); $im->line( 0, 400, 1000, 400, 0 ); $im->line( $x[$_-1], $y[$_-1], $x[$_], $y[$_], RED ) for 1 .. $#x; $im->line( $x[$_-1], $yd1[$_-1], $x[$_], $yd1[$_], GREEN ) for 2 .. $#x-1; $im->line( $x[$_-1], $yd2[$_-1], $x[$_], $yd2[$_], BLUE ) for 3 .. $#x-2; my @deltas = map{ ( 0 <=> $y[$_-1] - $y[$_] ) } 1 .. $#y; $deltas[$_-1] != $deltas[$_] and $im->line( $x[$_], 0, $x[$_], 800, 0 ) for 1 .. $#x-1; $im->flipVertical; open PNG, '>:raw', "$0.png" or die $!; print PNG $im->png; close PNG; system 1, "$0.png";