NAME
Transform::Canvas - Perl extension for performing Coordinate transformation operations from the cartesion to the traditional drawing-model canvas coordinate systems.
VERSION
VERSION 0.06 08 April, 2008
SYNOPSIS
use Transform::Canvas;
# create a mapping transform for data from
#x=-100,y=-100,x=100,y=100 to x=10,y=10,x=100,y=100
$t = Transform::Canvas->new(canvas=>[10,10,100,100],data=>[-100,-100,100,100]);
# create a arrays of x and y values
$r_x = [-100,-10, 0, 20, 40, 60, 80, 100];
$r_y = [-100,-10, 0, 20, 40, 60, 80, 100];
#map the two arrays into the canvas data space
($pr_x,$pr_y) = $t->map($r_x,$r_y);
DESCRIPTION
Transform::Canvas is a module which automates reference-frame transformations beween two cartesian coordinate systems. it is specifically intended to be used as a facilitator for coordinate-system transformation procedures between the traditional, right-hand-rule coordinate system used in mathematics graphing and the visual-arts coordinate system with a y-axis pointing down.
The module allows for arbitrary 2-D transform mappings.
Methods
new
Module constructor.
#there are two ways to invoke this module
#one-step constructo
$t = Transform::Canvas->new (canvas => [x0 y0 x1 y1], data=>[x0 y0 x1 y1])
# or two-step connstructor
$t-> Transform::Canvas->new ();
$t->prepareMap (canvas => [x0 y0 x1 y1], data=>[x0 y0 x1 y1])
generate the conversion object through which all data points will be passed. NB: svg drawings use the painter's model and use a coordinate system which starts at the top, left corner of the document and has x-axis increasing to the right and y-axis increasing down.
In certain drawings, the y-axis is inverted compared to mathematical representation systems which prefer y to increase in the upwards direction.
canvas (target):
x0 = paper-space minimum x value
y0 = paper-space maximum x value
x1 = paper-space minimum y value
y1 = paper-space maximum y value
data (source):
x0 = data-space minimum x value
y0 = data--space maximum x value
x1 = data-space minimum y value
y1 = data-space maximum y value
prepareMap hash %args
Prepare the transformation space for the conversions; Currently only handles linear transformations, but this is a perfect candidate for non-spacial, non-cartesian transforms...
sub cx0 [string $value]
set and/or return the canvas x min value
sub cx1 [string $value]
set and/or return the canvas x max value
sub cy0 [string $value]
set and/or return return the canvas y min value
sub cy1 [string $value]
set and/or return the canvas y max value
sub dx0 [string $value]
set and/or return the data space x min value
sub dx1 [string $value]
set and/or return the data space x max value
sub dy0 [string $value]
set and/or return the data space y min value
sub dy1 [string $value]
set and/or return the data space y max value.
map($x,$y)
Map an array or a value from the (x,y) data axes to the (x,y) canvas axes
mapX
Map an array or a value of the x data axis to the x canvas axis
mapY
Map an array or a value of the y data axis to the y canvas axis
Max
Find th of an array
my $x = $t->Max([1,2,3,4,5]);
This utility needed a home and this seems like a convenient place to stick it
Max
Find th of an array
my $x = $t->Max([1,2,3,4,5]);
SEE ALSO
SVG SVG::Parser SVG::DOM SVG::Element SVG::Graph SVG::Extension
AUTHOR
Ronan Oger, <ronan@roasp.com>
COPYRIGHT AND LICENSE
Copyright (C) 2004 by Ronan Oger
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.3 or, at your option, any later version of Perl 5 you may have available.
DEDICATION
This module's POD is dedicated to Adam Kennedy. I have little patience for rudeness and ignorance. Adam seems to show a past and current talent for both.
As a coder, he may have considered the emotional attachement people have with what they write. Although his review was fairly pointless and clearly so, this guy seems to make a habit of it. He needs to be kept accountable.
If this moppet had shown the slightest decency and had dropped me an email about the issue (I'm not hard to find), I may have addressed his fairly trivial concerns. Instead he decided to throw a lasting comment in an inappropriate place.
If anyone cares to see his review of this module, which he submitted without bothering to even try to use the module he criticized, have a look at the reviews for version 0.003.