#!/usr/bin/perl -w
# The Integral of the mathematical function 1/x
use strict;
use Chart::Bars;
print "1..1\n";
my @x_values = (); # x axis
my @y_values = ();
my $graphic;
my $picture_file = "samples/bars_4.png";
my $min_y = -5; # max. y-values
my $max_y = 5;
my $x;
my $y;
#------------------------------------------------------------------------------------
# Start
#------------------------------------------------------------------------------------
#calculate the values
for ( my $x = -5 ; $x <= 5 ; ( $x = $x + 0.0005 ) )
{
push( @x_values, $x );
if ( $x != 0 )
{ # division by zero!
$y = 1 / $x;
if ( $y > $max_y )
{
push( @y_values, $max_y );
}
elsif ( $y < $min_y )
{
push( @y_values, $min_y );
}
else
{
push( @y_values, $y );
}
}
else
{
push( @y_values, 0 );
}
}
#------------------------------------------------------------------------------------
# Make it
#------------------------------------------------------------------------------------
$graphic = Chart::Bars->new( 600, 600 );
$graphic->add_dataset(@x_values);
$graphic->add_dataset(@y_values);
$graphic->set( 'min_val' => $min_y );
$graphic->set( 'max_val' => $max_y );
$graphic->set( 'min_y_ticks' => 20 );
$graphic->set( 'skip_x_ticks' => 1000 );
$graphic->set( 'graph_border' => 18 );
$graphic->set( 'title' => "The Integral of 1/x" );
$graphic->set( 'grid_lines' => 'true' );
$graphic->set( 'x_ticks' => 'vertical' );
$graphic->set( 'legend' => 'none' );
$graphic->set( 'y_label' => 'f = 1 / x' );
$graphic->set( 'xy_plot' => 'true' );
# use a special function to convert the y values to something special
$graphic->set( 'f_y_tick' => \&formatter );
$graphic->set( 'f_x_tick' => \&formatter );
$graphic->png($picture_file);
sub formatter
{
my $y_value = shift;
my $label = sprintf "%1.2f", $y_value;
if ( $label == '-0.00' )
{
$label = '0';
}
return $label;
}
print "ok 1\n";
exit(0);