Math::Shape::Vector - A 2d vector library in cartesian space
version 0.12
use Math::Shape::Vector; my $v1 = Math::Shape::Vector->new(3, 5); my $v2 = Math::Shape::Vector->new(1, 17); $v1->add_vector($v2); $v1->negate; $v1->multiply(5); $v1->is_equal($v2);
This module contains 2d vector-based objects intended as base classes for 2d games programming. Most of the objects have collision detection (among other methods). The objects available are:
Math::Shape::Vector - a 2d vector (this module)
Math::Shape::Line - an infinite 2d line
Math::Shape::LineSegment - a finite 2d line (with a start and end)
Math::Shape::Range - a number range (e.g 1 through 20)
Math::Shape::Circle - a 2d Circle
Math::Shape::Rectangle - a 2d axis-oriented rectangle
Math::Shape::OrientedRectangle - a 2d oriented rectangle
Create a new vector. Requires two numerical arguments for the origin and magnitude.
my $vector = Math::Shape::Vector->new(3, 5);
Adds a vector to the vector object, returning a new vector object with the resulting x & y values.
my $new_vector = $vector->add_vector($vector_2);
Subtracts a vector from the vector object, returning a new vector object with the resulting x & y values.
my $new_vector = $vector->subtract_vector($vector_2);
Returns a new vector with negated values values e.g. (1,3) becomes (-1, -3).
my $new_vector = $vector->negate();
Compares a vector to the vector object, returning 1 if they are the same or 0 if they are different.
$vector->is_equal($vector_2);
Returns a new vector object with the x and y values multiplied by a number.
my $new_vector = $vector->multiply(3);
Returns a new vector object with the x and y values divided by a number.
my $new_vector = $vector->divide(2);
Returns a new vector with the x and y values rotated in radians.
use Math::Trig ':pi'; my $new_vector = $vector->rotate(pi);
Returns a new vector object with the x and y values rotated 90 degrees anti-clockwise.
my $new_vector = $vector->rotate_90;
Returns the dot product. Requires another Math::Shape::Vector object as an argument.
Returns the vector length.
my $length = $vector->length;
Returns a new vector object with a length of 1.
my $unit_vector = $vector->convert_to_unit_vector;
Maps the vector to another vector, returning a new vector object. Requires a Math::Shape::Vector object as an argument.
my $new_vector = $vector->project($vector_2);
Boolean method that returns 1 if the vector is parallel with another vector else returns zero. Requires a Math::Shape::Vector object as an argument.
my $v2 = Math::Shape::Vector(1, 2); if ($v->is_parallel($v2)) { # do something }
Returns the enclosed angle of another vector. Requires a Math::Shape::Vector object as an argument.
my $v2 = Math::Shape::Vector(4, 2); my $enclosed_angle = $v->enclosed_angle($v2);
Boolean method that returns 1 if the vector collides with another Math::Shape::Vector library object or not or 0 if not. Requires a Math::Shape::Vectorlibrary object as an argument
my $v1 = Math::Shape::Vector(4, 2); my $v2 = Math::Shape::Vector(4, 2); $v1->collides($v2); # 1 my $circle = Math::Shape::Circle->new(0, 0, 3); # x, y and radius $v1->collides($circle); # 0
Returns the distance from the vector to the nearest point of another shape. Requires an Math::Shape::Vector library object as an argument. Currently only implemented for vector and circle objects. For OrientedRectangle objects, distance uses the distance to the circle hull of the OrientedRectangle (not completely accurate).
my $distance = $vector->distance($other_vector);
https://github.com/sillymoose/Math-Shape-Vector.git
The source code for this class was inspired by the code in Thomas Schwarzl's 2d collision detection book http://www.collisiondetection2d.net.
David Farrell <sillymoos@cpan.org>
This software is copyright (c) 2014 by David Farrell.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Math::Shape::Vector, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Math::Shape::Vector
CPAN shell
perl -MCPAN -e shell install Math::Shape::Vector
For more information on module installation, please visit the detailed CPAN module installation guide.