package Math::nSphere; our $VERSION = '0.01'; use strict; use warnings; use Carp; use Exporter qw(import); our @EXPORT_OK = qw(nsphere_surface nsphere_volumen); my $PI = 3.14159265358979323846264338327950288419716939937510; my @S = ( 0 , 2 * $PI , 4 * $PI ); my @V = ( 0 , 2 , $PI , 4 / 3 * $PI ); sub nsphere_surface { my ($n, $r) = @_; my $S = $S[$n]; unless (defined $S) { $n = int $n; $n >= 0 or croak "index out of range"; my $i = $n; $i -= 2 until defined $S[$i]; $S = $S[$i]; while ($i < $n) { $i += 2; $S[$i] = $S = 2 * $PI * $S / ($i - 1); } }; return $S unless defined $r; $r ** $n * $S; } sub nsphere_volumen { my ($n, $r) = @_; my $V = $V[$n]; unless (defined $V) { $n = int $n; $n >= 0 or croak "index out of range"; my $i = $n; $i -= 2 until defined $V[$i]; $V = $V[$i]; while ($i < $n) { $i += 2; $V[$i] = $V = 2 * $PI * $V / $i; } }; return $V unless defined $r; $r ** ($n + 1) * $V; } 1; __END__ =head1 NAME Math::nSphere - calculate volumen and surface of n-spheres =head1 SYNOPSIS use Math::nSphere qw(nsphere_surface nshepere_volumen); my $sur = nsphere_surface($dim - 1, $radius); my $vol = nsphere_volumen($dim - 1, $radius); =head1 DESCRIPTION This module provides functions to calculate the surface and the volumen of n-spheres of any dimension. Note that n + 1 equals the space dimension. For instace, a circunference is a 1-sphere and a sphere is a 2-sphere. =over 4 =item $sur = nsphere_surface($n, $r) Returns the surface of the n-sphere of the given radius (1.0 by default). =item $vol = nsphere_volumen($n, $r) Returns the volumen of the n-sphere of the given radius (1.0 by default). =back =head1 SEE ALSO n-sphere entry at the Wikipedia: L =head1 COPYRIGHT AND LICENSE Copyright (C) 2011 by Salvador Fandino (sfandino@yahoo.com) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.12.3 or, at your option, any later version of Perl 5 you may have available. =cut