#!/usr/bin/perl -w use strict; use GD; my @loc; my ($xmin, $xmax, $ymin, $ymax, $zmin, $zmax, $first); # MoE # | z+ # | # x- -------- x+ # | # | z- # GD # +---------- x+ # | # | # | # | y+ $first = 1; my $fh; open $fh, 'loc.txt'; while (<$fh>) { if (/X:([-.0-9]+) Y:([-.0-9]+) Z:([-.0-9]+)/) { push @loc, [$1, $2, $3]; if ($first) { $xmin = $xmax = $1; $ymin = $ymax = $2; $zmin = $zmax = $3; $first = 0; } else { $xmin > $1 and $xmin = $1; $xmax < $1 and $xmax = $1; $ymin > $2 and $ymin = $2; $ymax < $2 and $ymax = $2; $zmin > $3 and $zmin = $3; $zmax < $3 and $zmax = $3; } } else { next; } } close $fh; print "$xmin, $xmax, $ymin, $ymax, $zmin, $zmax\n"; my $xoffset = 0 - $xmin + 10; my $width = $xmax + $xoffset; my $zoffset = 0 - $zmin + 10; my $height = $zmax + $zoffset; my $yoffset = 0 - $ymin; my $yratio = 255 / ($ymax - $ymin); my $skip = 0; my $map = new GD::Image($width + 20, $height + 20); $map->colorAllocate(0, 0, 0); my $white = $map->colorAllocate(255, 255, 255); for my $n (0 .. 255) { $map->colorAllocate($n, 256 - $n, 0); } for my $n (0 .. @loc - 2) { if ($loc[$n]->[0] == $loc[$n + 1]->[0] and $loc[$n]->[2] == $loc[$n + 1]->[2]) { $skip = 1; next; } unless ($skip) { my $luminus = int(($loc[$n]->[1] + $yoffset) * $yratio) + 1; $map->line($loc[$n]->[0] + $xoffset , $loc[$n]->[2] + $zoffset, $loc[$n + 1]->[0] + $xoffset, $loc[$n + 1]->[2] + $zoffset, $map->colorClosest($luminus, 256 - $luminus, 0)); } else { $skip = 0; } } $map->line(10, 5, 1010, 5, $white); $map->line(10 + $xoffset, $zoffset, -10 + $xoffset, $zoffset, $white); $map->line($xoffset, 10 + $zoffset, $xoffset, -10 + $zoffset, $white); $map->flipVertical(); open $fh, ">test.png" or die $!; binmode $fh; print $fh $map->png; close $fh; print "updated\n";