Math-Zap
view release on metacpan or search on metacpan
lib/Math/Zap/Triangle.pm view on Meta::CPAN
}
=head3 triangle
Create a triangle from 3 vectors specifying the coordinates of each
corner in space coordinates - synonym for L</new>.
=cut
sub triangle($$$) {new($_[0],$_[1],$_[2])};
=head2 Methods
=head3 narrow
Narrow (colinear) triangle?
=cut
sub narrow($$)
{my $t = shift; # Triangle
my $a = 1e-2; # Accuracy
my $A = shift; # Action 0: return indicator, 1: confess
my $n = (($t->b-$t->a) x ($t->c-$t->a))->length < $a;
confess "Narrow triangle" if $n and $A;
$n;
}
=head3 check
Check its a triangle
=cut
sub check(@)
{if (debug)
{for my $t(@_)
{confess "$t is not a triangle" unless ref($t) eq __PACKAGE__;
}
}
return (@_)
}
=head3 is
Test its a triangle
=cut
sub is(@)
{for my $t(@_)
{return 0 unless ref($t) eq __PACKAGE__;
}
'triangle';
}
=head3 components
Components of a triangle
=cut
sub a($) {check(@_) if debug; $_[0]->{a}}
sub b($) {check(@_) if debug; $_[0]->{b}}
sub c($) {check(@_) if debug; $_[0]->{c}}
sub ab($) {check(@_) if debug; ($_[0]->{b}-$_[0]->{a})}
sub ac($) {check(@_) if debug; ($_[0]->{c}-$_[0]->{a})}
sub ba($) {check(@_) if debug; ($_[0]->{a}-$_[0]->{b})}
sub bc($) {check(@_) if debug; ($_[0]->{c}-$_[0]->{b})}
sub ca($) {check(@_) if debug; ($_[0]->{a}-$_[0]->{c})}
sub cb($) {check(@_) if debug; ($_[0]->{b}-$_[0]->{c})}
sub abc($) {check(@_) if debug; ($_[0]->{a}, $_[0]->{b}, $_[0]->{c})}
sub area($){check(@_) if debug; ($_[0]->ab x $_[0]->ac)->length}
=head3 clone
Create a triangle from another triangle
=cut
sub clone($)
{my ($t) = check(@_); # Triangle
bless {a=>$t->a, b=>$t->b, c=>$t->c};
}
=head3 permute
Cyclically permute the points of a triangle
=cut
sub permute($)
{my ($t) = check(@_); # Triangle
bless {a=>$t->b, b=>$t->c, c=>$t->a};
}
=head3 center
Center
=cut
sub center($)
{my ($t) = check(@_); # Triangle
($t->a + $t->b + $t->c) / 3;
}
=head3 add
Add a vector to a triangle
=cut
sub add($$)
{my ($t) = check(@_[0..0]); # Triangle
my ($v) = vectorCheck(@_[1..1]); # Vector
new($t->a+$v, $t->b+$v, $t->c+$v);
}
=head3 subtract
( run in 0.637 second using v1.01-cache-2.11-cpan-524268b4103 )