NAME
Astro::Montenbruck::Core::MathUtils - Core mathematical routines used by Astro::Montenbruck modules.
VERSION
Version 0.01
SYNOPSIS
use Astro::Montenbruck::Core::MathUtils qw/dms/;
my ($d, $m, $s) = dms(55.75); # (55, 45, 0)
...
EXPORT
SUBROUTINES
frac($x)
Fractional part of a decimal number.
frac360($x)
Range function, similar to "to_range($x, $range)", used with polinomial function for better accuracy.
dms($x)
Given decimal hours (or degrees), return nearest hours (or degrees), int, minutes, int, and seconds, float.
Positional arguments:
decimal value, 0..360 for angular mode, 0..24 for time
Named arguments:
places (optional) amount of required sexagesimal values to be returned (1-3); default = 3 (degrees/hours, minutes, seconds)
Returns:
array of degrees (int), minutes (int), seconds (float)
hms($x)
Alias for "dms"
zdms($x)
Converts decimal degrees to zodiac sign number (zero based), zodiac degrees, minutes and seconds.
Positional arguments:
decimal value, 0..360 for angular mode, 0..24 for time
Returns:
array of zodiac sign (0-11), degrees (int), minutes (int), seconds (float)
ddd($deg[, $min[, $sec]])
Converts sexagesimal values to decimal.
Arguments
ddd(11)
ddd(11, 46)
ddd(11, 46, 20)
ddd(-11, 46, 0) = -11.766666666666667
ddd(11, -46, 0) = 11.766666666666667
1 to 3 sexagesimal values, such as: degrees, minutes and seconds, or degrees and minutes, or just degrees:
If any non-zero argument is negative, the result is negative.
Negative sign in wrong position is ignored.
Returns:
decimal (degrees or hours)
polynome($t, @terms)
Calculates polynome: $a1 + $a2*$t + $a3*$t*$t + $a4*$t*$t*$t...
Arguments
$t coefficient, in astronomical routines usually time in centuries
any number of decimal values
Returns:
decimal number
to_range($x, $range)
Reduces $x to 0 >= $x < $range
Arguments
number to reduce
limit (non-inclusive), e.g: 360 for degrees, 24 for hours
Returns
number
reduce_deg($x)
Reduces $x to 0 >= $x < 360
reduce_rad($x)
Reduces $x to 0 >= $x < pi2
opposite_deg($x)
Returns opposite degree.
opposite_rad($x)
Returns opposite radian.
angle_c($x, $y)
Calculate shortest arc in dergees between $x and $y.
angle_c_rad($x, $y)
Calculates shortest arc in radians between $x and $y.
angle_s($x1, $y1, $x2, $y2)
Calculates arc between 2 points on a sphere. Expected arguments: 2 pairs of coordinates (X, Y) of the 2 points.
The coordinates may be ecliptic, equatorial or horizontal.
diff_angle($a, $b, $mode='degrees')
Return angle $b - $a
, accounting for circular values.
Parameters $a and $b should be in the range 0..pi*2 or 0..360, depending on optional $mode argument. The result will be in the range -pi..pi or -180..180. This allows us to directly compare angles which cross through 0: 359 degress... 0 degrees... 1 degree... etc.
Positional Arguments
$a first angle, in radians or degrees
$b second angle, in radians or degrees
Named Arguments
$mode
"degrees"
(default) or"radians"
, case insensitive.
sine($x)
Calculate sin(phi); phi in units of 1 revolution = 360 degrees
cart($r, $theta, $phi)
Conversion of polar coordinates (r,theta,phi) into cartesian (x,y,z).
Arguments
$r, distance from the origin;
$theta (in radians) corresponding to [-90 deg, +90 deg];
$phi (in radians) corresponding to [-360 deg, +360 deg])
Returns
Rectangular coordinates:
$x, X
$y, Y
$z, Z
polar($x, $y, $z)
Conversion of cartesian coordinates (x,y,z) into polar (r,theta,phi).
Arguments
$x, X
$y, Y
$z, Z
Returns
$r, distance from the origin;
$theta (in radians) corresponding to [-90 deg, +90 deg];
$phi (in radians) corresponding to [-360 deg, +360 deg])
quad($y_minus, $y_0, $y_plus)
Quadratic interpolation
Finds a parabola through 3 points (-1 , y_minus), (0, Y_0), (1, y_plus)
, that do not lie on a straight line.
Arguments
Three y-values:
$y_minus value of function at x = -1
$y_0 value of function at x = 0
$y_plus value of function at x = 1
Returns
$xe, abscissa of extremum (may be outside
[-1, 1]
)$ye, Value of function at xe
$root1, first root found
$root2, second root found
$n_root, number of roots within the interval
[-1, +1]
AUTHOR
Sergey Krushinsky, <krushi at cpan.org>
COPYRIGHT & LICENSE Copyright (C) 2009-2022 by Sergey Krushinsky
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.