perl_mlb
view release on metacpan or search on metacpan
Math/Complex.pm view on Meta::CPAN
# cplx
#
# Creates a complex number from a (re, im) tuple.
# This avoids the burden of writing Math::Complex->make(re, im).
#
sub cplx {
return __PACKAGE__->make(@_);
}
#
# cplxe
#
# Creates a complex number from a (rho, theta) tuple.
# This avoids the burden of writing Math::Complex->emake(rho, theta).
#
sub cplxe {
return __PACKAGE__->emake(@_);
}
#
# pi
#
# The number defined as pi = 180 degrees
#
sub pi () { 4 * CORE::atan2(1, 1) }
#
# pit2
#
# The full circle
#
sub pit2 () { 2 * pi }
#
# pip2
#
# The quarter circle
#
sub pip2 () { pi / 2 }
#
# deg1
#
# One degree in radians, used in stringify_polar.
#
sub deg1 () { pi / 180 }
#
# uplog10
#
# Used in log10().
#
sub uplog10 () { 1 / CORE::log(10) }
#
# i
#
# The number defined as i*i = -1;
#
sub i () {
return $i if ($i);
$i = bless {};
$i->{'cartesian'} = [0, 1];
$i->{'polar'} = [1, pip2];
$i->{c_dirty} = 0;
$i->{p_dirty} = 0;
return $i;
}
#
# ip2
#
# Half of i.
#
sub ip2 () { i / 2 }
#
# Attribute access/set routines
#
sub cartesian {$_[0]->{c_dirty} ?
$_[0]->update_cartesian : $_[0]->{'cartesian'}}
sub polar {$_[0]->{p_dirty} ?
$_[0]->update_polar : $_[0]->{'polar'}}
sub set_cartesian { $_[0]->{p_dirty}++; $_[0]->{'cartesian'} = $_[1] }
sub set_polar { $_[0]->{c_dirty}++; $_[0]->{'polar'} = $_[1] }
#
# ->update_cartesian
#
# Recompute and return the cartesian form, given accurate polar form.
#
sub update_cartesian {
my $self = shift;
my ($r, $t) = @{$self->{'polar'}};
$self->{c_dirty} = 0;
return $self->{'cartesian'} = [$r * CORE::cos($t), $r * CORE::sin($t)];
}
#
#
# ->update_polar
#
# Recompute and return the polar form, given accurate cartesian form.
#
sub update_polar {
my $self = shift;
my ($x, $y) = @{$self->{'cartesian'}};
$self->{p_dirty} = 0;
return $self->{'polar'} = [0, 0] if $x == 0 && $y == 0;
return $self->{'polar'} = [CORE::sqrt($x*$x + $y*$y),
CORE::atan2($y, $x)];
}
#
# (plus)
#
# Computes z1+z2.
#
( run in 0.658 second using v1.01-cache-2.11-cpan-13bb782fe5a )