NAME

Grid::Coord - abstract representation and manipulation of points and rectangles

SYNOPSIS

  use Grid::Coord
        my $point1 = Grid::Coord->new(5,4);        # point(y=>5, x=>4)
        my $rect1  = Grid::Coord->new(2,3 => 6,5); # rectangle
        print "TRUE" if $rect1->contains($point1);

        my $rect2  = Grid::Coord->new(3,4 => 5,5); # another rectangle
        my $rect3  = $rect1->overlap($rect2)       # (3,4 => 5,5)
        print $rect3->stringify;                   # "(3,4 => 5,5)"
        print $rect3;                              # "(3,4 => 5,5)"
        print "TRUE" if $rect3->equals(Grid::Coord->new(3,4 => 5,5));
        print "TRUE" if $rect3 == Grid::Coord->new(3,4 => 5,5);

DESCRIPTION

Manage points or rectangles on a grid. This is generic, and could be used for spreadsheets, ascii art, or other nefarious purposes.

USAGE

Constructor

 Grid->Coord->new($y, $x);
 Grid->Coord->new($min_y, $min_x,  $max_y, $max_x);

Accessing coordinates

The min_y, min_x, max_y, max_x functions:

 print $coord->max_x; # get value
 $coord->min_x(4);    # set value to 4

Relationships with other Coords

 $c3 = $c1->overlap($c2);
 print "TRUE" if $rect1->contains($rect2);
 print "TRUE" if $rect1->equals($rect2);

Overloaded operators

Four operators are overloaded:

  • the stringification operator

    So that print $coord does something reasonable

  • the equality operator

    so that if ($coord1 == $coord2) does the right thing.

  • the add operator

    So that $c1 + $c2 is a synonym for $c1-offset($c2)>

  • the subtract operator

    So that $c1 - $c2 is a synonym for $c1-delta($c2)>

Iterating

The iterator returns a Grid::Coord object for each cell in the current Grid::Coord range.

  my $it = $grid->cell_iterator; # or ->cell_iterator_rowwise
  # my $it = $grid->cell_iterator_colwise; # top to bottom

  while (my $cell = $it3->()) {
    # do something to $cell
  }

You can also iterate columns/rows with $grid->cells_iterator $grid->rows_iterator

BUGS

None reported yet.

SUPPORT

From the author.

AUTHOR

        osfameron@cpan.org
        http://osfameron.perlmonk.org/

COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.

SEE ALSO

perl(1).