NAME
Grid::Transform - fast grid transformations
SYNOPSIS
use Grid::Transform;
$g = Grid::Transform->new(['a'..'o'], rows=>5);
$g->rotate_270->flip_vertical;
print join(' ', $g->grid), "\n";
DESCRIPTION
The Grid::Transform
module provides fast methods to transform a grid of arbitrary data types.
METHODS
- $g = Grid::Transform->new(\@grid, rows=>num, columns=>num)
-
Creates a new
Grid::Transform
object. The first argument is a reference to a 1-dimensional array representing a 2-dimensional "row major" (row by row) grid. (A column major grid is simply the counter transpose of a row major one.) The grid may be composed of arbitrary data types. The original array is never modified- all transformations operate on a copy.At least one dimension must be specified. If the grid and dimensions do not produce a rectangular grid extra empty elements ("") will be added to the grid.
- $g2 = $g->copy
-
Returns a copy of the original
Grid::Transform
object.
These methods get or set the grid attributes:
- @grid = $g->grid
- $grid = $g->grid
- @grid = $g->grid(\@grid)
-
In list context, returns an array representing the current grid. In scalar context, returns a reference to the array. Accepts an array reference representing a new grid. The new grid will be resized if the dimensions of the previous grid do not match.
- $g->rows
- $g->rows($num)
-
Returns or sets the current number of rows.
- $g->columns
- $g->cols
- $g->columns($num)
-
Returns or sets the current number of columns.
All transform methods return the Grid::Transform
object, so transforms can be chained.
- $g->rotate_90
- $g->rotate90
-
Rotates the grid 90 degrees clock-wise.
a b c d e f g h i j k l a b c d i e a | e f g h -> j f b i e a j f b k g c l h d i j k l k g c l h d
- $g->rotate_180
- $g->rotate180
-
Rotates the grid 180 degrees clock-wise.
a b c d e f g h i j k l a b c d l k j i | e f g h -> h g f e l k j i h g f e d c b a i j k l d c b a
- $g->rotate_270
- $g->rotate270
-
Rotates the grid 270 degrees clock-wise.
a b c d e f g h i j k l a b c d d h l | e f g h -> c g k d h l c g k b f j a e i i j k l b f j a e i
- $g->flip_horizontal
- $g->mirror_horizontal
-
Flips the grid across the horizontal axis.
a b c d e f g h i j k l a b c d i j k l | e f g h -> e f g h i j k l e f g h a b c d i j k l a b c d
- $g->flip_vertical
- $g->mirror_vertical
-
Flips the grid across the vertical axis.
a b c d e f g h i j k l a b c d d c b a | e f g h -> h g f e d c b a h g f e l k j i i j k l l k j i
- $g->transpose
-
Flips the grid across the vertical axis and then rotates it 90 degress clock-wise.
a b c d e f g h i j k l a b c d l h d | e f g h -> k g c l h d k g c j f b i e a i j k l j f b i e a
- $g->counter_transpose
- $g->countertranspose
-
Flips the grid across the horizontal axis and then rotates it 90 degrees clock-wise.
a b c d e f g h i j k l a b c d a e i | e f g h -> b f j a e i b f j c g k d h l i j k l c g k d h l
- $g->fold_right
-
Folds the columns to the right.
a b c d e f g h i j k l a b c d b c d a | e f g h -> f g e h b c a d f g e h j k i l i j k l j k i l
- $g->fold_left
-
Folds the columns to the left.
a b c d e f g h i j k l a b c d d a c b | e f g h -> h e g f d a c b h e g f l i k j i j k l l i k j
- $g->alternate_row_direction
- $g->alt_row_dir
-
Follows a path from left to right on the first row, right to left on the second, left to right on the third, etc.
a b c d e f g h i j k l a b c d a b c d | e f g h -> h g f e a b c d h g f e i j k l i j k l i j k l
- $g->spiral
-
Follows a spiral path towards the center, starting from the upper left to right.
a b c d e f g h i j k l a b c d a b c d | e f g h -> h l k j a b c d h l k j i e f g i j k l i e f g
NOTES
Some of the methods require temporary extra space for bookkeeping, so it's possible that O(n^3) space will be required- the original array, the internal copy, and the temporary space required by the transformation. Note, the copies are shallow, so they will be smaller than the original array if it contains complex data structures.
REQUESTS AND BUGS
Please report any bugs or feature requests to http://rt.cpan.org/Public/Bug/Report.html?Queue=Grid-Transform. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
TODO
Allow the empty element to be user-specified (e.g. $Grid::Transform::EMPTY_ELEMENT or empty_element constructor arg).
Accept / convert grid to LoLs.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Grid::Transform
You can also look for information at:
GitHub Source Repository
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
http://rt.cpan.org/Public/Dist/Display.html?Name=Grid-Transform
Search CPAN
COPYRIGHT AND LICENSE
Copyright (C) 2006-2014 gray <gray at cpan.org>, all rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
gray, <gray at cpan.org>