Math-Zap
view release on metacpan or search on metacpan
lib/Math/Zap/Triangle2.pm view on Meta::CPAN
=head3 accuracy
Get/Set accuracy for comparisons
=cut
my $accuracy = 1e-10;
sub accuracy
{return $accuracy unless scalar(@_);
$accuracy = shift();
}
=head3 narrow
Narrow (colinear) colinear?
=cut
sub narrow($$)
{my $t = shift; # Triangle
my $a = 1e-2; # Accuracy
my $A = shift; # Action 0: return indicator, 1: confess
my $b = vector($t->{b}{x}-$t->{a}{x}, $t->{b}{y}-$t->{a}{y}, 0);
my $c = vector($t->{c}{x}-$t->{a}{x}, $t->{c}{y}-$t->{a}{y}, 0);
my $n = ($b x $c)->length < $a;
confess "Narrow triangle2" if $n and $A;
$n;
}
=head3 check
Check its a triangle
=cut
sub check(@)
{if (debug)
{for my $t(@_)
{confess "$t is not a triangle2" unless ref($t) eq __PACKAGE__;
}
}
@_;
}
=head3 is
Test its a triangle
=cut
sub is(@)
{for my $t(@_)
{return 0 unless ref($t) eq __PACKAGE__;
}
'triangle2';
}
=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 lab($) {check(@_) if debug; line2($_[0]->{b}, $_[0]->{a})}
sub lac($) {check(@_) if debug; line2($_[0]->{c}, $_[0]->{a})}
sub lba($) {check(@_) if debug; line2($_[0]->{a}, $_[0]->{b})}
sub lbc($) {check(@_) if debug; line2($_[0]->{c}, $_[0]->{b})}
sub lca($) {check(@_) if debug; line2($_[0]->{a}, $_[0]->{c})}
sub lcb($) {check(@_) if debug; line2($_[0]->{b}, $_[0]->{c})}
=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 area
Area
=cut
sub area($)
{my ($t) = check(@_); # Triangle
sqrt((($t->ab*$t->ab) * ($t->ac*$t->ac)) - ($t->ab * $t->ac))/2;
( run in 0.843 second using v1.01-cache-2.11-cpan-524268b4103 )