The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Vector::Object3D::Point::Transform - Three-dimensional point object transformations

SYNOPSIS

package Vector::Object3D::Point;

use Readonly;
Readonly my $pi => 3.14159;

use Moose;
with 'Vector::Object3D::Point::Transform';

# Calling any method from this role requires providing an object of a base class
# and results in creation of a new instance of the same class:
my $point = Vector::Object3D::Point->new(coord => [3, -2, 1]);

# Rotate point on a 2D plane:
my $rotatePoint2D = $point->rotate(
  rotate_xy => 30 * ($pi / 180),
);

# Scale point on a 2D plane:
my $scalePoint2D = $point->scale(
  scale_x => 2,
  scale_y => 2,
);

# Translate point on a 2D plane:
my $translatePoint2D = $point->translate(
  shift_x => -2,
  shift_y => 1,
);

# Rotate point in a 3D space:
my $rotatePoint3D = $point->rotate(
  rotate_xy => 30 * ($pi / 180),
  rotate_yz => -30 * ($pi / 180),
  rotate_xz => 45 * ($pi / 180),
);

# Scale point in a 3D space:
my $scalePoint3D = $point->scale(
  scale_x => 2,
  scale_y => 2,
  scale_z => 3,
);

# Translate point in a 3D space:
my $translatePoint3D = $point->translate(
  shift_x => -2,
  shift_y => 1,
  shift_z => 3,
);

DESCRIPTION

Vector::Object3D::Point::Transform is a Moose role that is meant to be applied to Vector::Object3D::Point class in order to provide it with additional methods supporting fundamental transformations in the 3D space, such as rotation, scaling and translation.

METHODS

rotate

Rotate point on a 2D plane:

my $rotatePoint2D = $point->rotate(
  rotate_xy => 30 * ($pi / 180),
);

Rotate point in a 3D space:

my $rotatePoint3D = $point->rotate(
  rotate_xy => 30 * ($pi / 180),
  rotate_yz => -30 * ($pi / 180),
  rotate_xz => 45 * ($pi / 180),
);

scale

Scale point on a 2D plane:

my $scalePoint2D = $point->scale(
  scale_x => 2,
  scale_y => 2,
);

Scale point in a 3D space:

my $scalePoint3D = $point->scale(
  scale_x => 2,
  scale_y => 2,
  scale_z => 3,
);

translate

Translate point on a 2D plane:

my $translatePoint2D = $point->translate(
  shift_x => -2,
  shift_y => 1,
);

Translate point in a 3D space:

my $translatePoint3D = $point->translate(
  shift_x => -2,
  shift_y => 1,
  shift_z => 3,
);

BUGS

There are no known bugs at the moment. Please report any bugs or feature requests.

EXPORT

Vector::Object3D::Point::Transform exports nothing neither by default nor explicitly.

SEE ALSO

Vector::Object3D::Point.

AUTHOR

Pawel Krol, <pawelkrol@cpan.org>.

VERSION

Version 0.01 (2012-12-24)

COPYRIGHT AND LICENSE

Copyright (C) 2012 by Pawel Krol.

This library is free open source software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.

PLEASE NOTE THAT IT COMES WITHOUT A WARRANTY OF ANY KIND!