fixed dependencies

This commit is contained in:
nuknal
2024-10-24 15:46:01 +08:00
parent d16a5bd9c0
commit 1161e8d054
2005 changed files with 690883 additions and 0 deletions

563
vendor/github.com/hebl/gofa/projection.go generated vendored Normal file
View File

@@ -0,0 +1,563 @@
// Copyright 2022 HE Boliang
// All rights reserved.
package gofa
/*
Tpxes Project celestial to tangent plane, spherical
In the tangent plane projection, given celestial spherical
coordinates for a star and the tangent point, solve for the star's
rectangular coordinates in the tangent plane.
Given:
a,b float64 star's spherical coordinates
a0,b0 float64 tangent point's spherical coordinates
Returned:
xi,eta float64 rectangular coordinates of star image (Note 2)
Returned (function value):
int status: 0 = OK
1 = star too far from axis
2 = antistar on tangent plane
3 = antistar too far from axis
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the spherical coordinates are observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". For right-handed spherical coordinates,
(xi,eta) are also right-handed. The units of (xi,eta) are,
effectively, radians at the tangent point.
3) All angular arguments are in radians.
4) This function is a member of the following set:
spherical vector solve for
> iauTpxes < iauTpxev xi,eta
iauTpsts iauTpstv star
iauTpors iauTporv origin
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tpxes(a, b, a0, b0 float64, xi, eta *float64) int {
const TINY = 1e-6
var j int
var sb0, sb, cb0, cb, da, sda, cda, d float64
/* Functions of the spherical coordinates. */
sb0 = sin(b0)
sb = sin(b)
cb0 = cos(b0)
cb = cos(b)
da = a - a0
sda = sin(da)
cda = cos(da)
/* Reciprocal of star vector length to tangent plane. */
d = sb*sb0 + cb*cb0*cda
/* Check for error cases. */
if d > TINY {
j = 0
} else if d >= 0.0 {
j = 1
d = TINY
} else if d > -TINY {
j = 2
d = -TINY
} else {
j = 3
}
/* Return the tangent plane coordinates (even in dubious cases). */
*xi = cb * sda / d
*eta = (sb*cb0 - cb*sb0*cda) / d
/* Return the status. */
return j
}
/*
Tpxev Project celestial to tangent plane, vector
In the tangent plane projection, given celestial direction cosines
for a star and the tangent point, solve for the star's rectangular
coordinates in the tangent plane.
Given:
v [3]float64 direction cosines of star (Note 4)
v0 [3]float64 direction cosines of tangent point (Note 4)
Returned:
xi,eta float64 tangent plane coordinates of star
Returned (function value):
int status: 0 = OK
1 = star too far from axis
2 = antistar on tangent plane
3 = antistar too far from axis
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the direction cosines represent observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". If the direction cosines are with
respect to a right-handed triad, (xi,eta) are also right-handed.
The units of (xi,eta) are, effectively, radians at the tangent
point.
3) The method used is to extend the star vector to the tangent
plane and then rotate the triad so that (x,y) becomes (xi,eta).
Writing (a,b) for the celestial spherical coordinates of the
star, the sequence of rotations is (a+pi/2) around the z-axis
followed by (pi/2-b) around the x-axis.
4) If vector v0 is not of unit length, or if vector v is of zero
length, the results will be wrong.
5) If v0 points at a pole, the returned (xi,eta) will be based on
the arbitrary assumption that the longitude coordinate of the
tangent point is zero.
6) This function is a member of the following set:
spherical vector solve for
iauTpxes > iauTpxev < xi,eta
iauTpsts iauTpstv star
iauTpors iauTporv origin
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tpxev(v, v0 [3]float64, xi, eta *float64) int {
const TINY = 1e-6
var j int
var x, y, z, x0, y0, z0, r2, r, w, d float64
/* Star and tangent point. */
x = v[0]
y = v[1]
z = v[2]
x0 = v0[0]
y0 = v0[1]
z0 = v0[2]
/* Deal with polar case. */
r2 = x0*x0 + y0*y0
r = sqrt(r2)
if r == 0.0 {
r = 1e-20
x0 = r
}
/* Reciprocal of star vector length to tangent plane. */
w = x*x0 + y*y0
d = w + z*z0
/* Check for error cases. */
if d > TINY {
j = 0
} else if d >= 0.0 {
j = 1
d = TINY
} else if d > -TINY {
j = 2
d = -TINY
} else {
j = 3
}
/* Return the tangent plane coordinates (even in dubious cases). */
d *= r
*xi = (y*x0 - x*y0) / d
*eta = (z*r2 - z0*w) / d
/* Return the status. */
return j
}
/*
Tpsts Project tangent plane to celestial, spherical
In the tangent plane projection, given the star's rectangular
coordinates and the spherical coordinates of the tangent point,
solve for the spherical coordinates of the star.
Given:
xi,eta float64 rectangular coordinates of star image (Note 2)
a0,b0 float64 tangent point's spherical coordinates
Returned:
a,b float64 star's spherical coordinates
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the spherical coordinates are observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". If the spherical coordinates are with
respect to a right-handed triad, (xi,eta) are also right-handed.
The units of (xi,eta) are, effectively, radians at the tangent
point.
3) All angular arguments are in radians.
4) This function is a member of the following set:
spherical vector solve for
iauTpxes iauTpxev xi,eta
> iauTpsts < iauTpstv star
iauTpors iauTporv origin
Called:
Anp normalize angle into range 0 to 2pi
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tpsts(xi, eta, a0, b0 float64, a, b *float64) {
var sb0, cb0, d float64
sb0 = sin(b0)
cb0 = cos(b0)
d = cb0 - eta*sb0
*a = Anp(atan2(xi, d) + a0)
*b = atan2(sb0+eta*cb0, sqrt(xi*xi+d*d))
}
/*
Tpstv Project tangent plane to celestial, vector
In the tangent plane projection, given the star's rectangular
coordinates and the direction cosines of the tangent point, solve
for the direction cosines of the star.
Given:
xi,eta float64 rectangular coordinates of star image (Note 2)
v0 [3]float64 tangent point's direction cosines
Returned:
v [3]float64 star's direction cosines
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the direction cosines represent observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". If the direction cosines are with
respect to a right-handed triad, (xi,eta) are also right-handed.
The units of (xi,eta) are, effectively, radians at the tangent
point.
3) The method used is to complete the star vector in the (xi,eta)
based triad and normalize it, then rotate the triad to put the
tangent point at the pole with the x-axis aligned to zero
longitude. Writing (a0,b0) for the celestial spherical
coordinates of the tangent point, the sequence of rotations is
(b-pi/2) around the x-axis followed by (-a-pi/2) around the
z-axis.
4) If vector v0 is not of unit length, the returned vector v will
be wrong.
5) If vector v0 points at a pole, the returned vector v will be
based on the arbitrary assumption that the longitude coordinate
of the tangent point is zero.
6) This function is a member of the following set:
spherical vector solve for
iauTpxes iauTpxev xi,eta
iauTpsts > iauTpstv < star
iauTpors iauTporv origin
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tpstv(xi, eta float64, v0 [3]float64, v *[3]float64) {
var x, y, z, f, r float64
/* Tangent point. */
x = v0[0]
y = v0[1]
z = v0[2]
/* Deal with polar case. */
r = sqrt(x*x + y*y)
if r == 0.0 {
r = 1e-20
x = r
}
/* Star vector length to tangent plane. */
f = sqrt(1.0 + xi*xi + eta*eta)
/* Apply the transformation and normalize. */
v[0] = (x - (xi*y+eta*x*z)/r) / f
v[1] = (y + (xi*x-eta*y*z)/r) / f
v[2] = (z + eta*r) / f
}
/*
Tpors Solve for tangent point, spherical
In the tangent plane projection, given the rectangular coordinates
of a star and its spherical coordinates, determine the spherical
coordinates of the tangent point.
Given:
xi,eta float64 rectangular coordinates of star image (Note 2)
a,b float64 star's spherical coordinates (Note 3)
Returned:
a01,b01 float64 tangent point's spherical coordinates, Soln. 1
a02,b02 float64 tangent point's spherical coordinates, Soln. 2
Returned (function value):
int number of solutions:
0 = no solutions returned (Note 5)
1 = only the first solution is useful (Note 6)
2 = both solutions are useful (Note 6)
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the spherical coordinates are observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". If the spherical coordinates are with
respect to a right-handed triad, (xi,eta) are also right-handed.
The units of (xi,eta) are, effectively, radians at the tangent
point.
3) All angular arguments are in radians.
4) The angles a01 and a02 are returned in the range 0-2pi. The
angles b01 and b02 are returned in the range +/-pi, but in the
usual, non-pole-crossing, case, the range is +/-pi/2.
5) Cases where there is no solution can arise only near the poles.
For example, it is clearly impossible for a star at the pole
itself to have a non-zero xi value, and hence it is meaningless
to ask where the tangent point would have to be to bring about
this combination of xi and dec.
6) Also near the poles, cases can arise where there are two useful
solutions. The return value indicates whether the second of the
two solutions returned is useful; 1 indicates only one useful
solution, the usual case.
7) The basis of the algorithm is to solve the spherical triangle PSC,
where P is the north celestial pole, S is the star and C is the
tangent point. The spherical coordinates of the tangent point are
[a0,b0]; writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), side c
is then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be
found) is (pi/2-b0). Angle C is given by sin(C) = xi/rho and
cos(C) = eta/rho. Angle P (to be found) is the longitude
difference between star and tangent point (a-a0).
8) This function is a member of the following set:
spherical vector solve for
iauTpxes iauTpxev xi,eta
iauTpsts iauTpstv star
> iauTpors < iauTporv origin
Called:
Anp normalize angle into range 0 to 2pi
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tpors(xi, eta, a, b float64, a01, b01, a02, b02 *float64) int {
var xi2, r, sb, cb, rsb, rcb, w2, w, s, c float64
xi2 = xi * xi
r = sqrt(1.0 + xi2 + eta*eta)
sb = sin(b)
cb = cos(b)
rsb = r * sb
rcb = r * cb
w2 = rcb*rcb - xi2
if w2 >= 0.0 {
w = sqrt(w2)
s = rsb - eta*w
c = rsb*eta + w
if xi == 0.0 && w == 0.0 {
w = 1.0
}
*a01 = Anp(a - atan2(xi, w))
*b01 = atan2(s, c)
w = -w
s = rsb - eta*w
c = rsb*eta + w
*a02 = Anp(a - atan2(xi, w))
*b02 = atan2(s, c)
if fabs(rsb) < 1.0 {
return 1
} else {
return 2
}
} else {
return 0
}
}
/*
Tporv Solve for tangent point, vector
In the tangent plane projection, given the rectangular coordinates
of a star and its direction cosines, determine the direction
cosines of the tangent point.
Given:
xi,eta float64 rectangular coordinates of star image (Note 2)
v [3]float64 star's direction cosines (Note 3)
Returned:
v01 [3]float64 tangent point's direction cosines, Solution 1
v02 [3]float64 tangent point's direction cosines, Solution 2
Returned (function value):
int number of solutions:
0 = no solutions returned (Note 4)
1 = only the first solution is useful (Note 5)
2 = both solutions are useful (Note 5)
Notes:
1) The tangent plane projection is also called the "gnomonic
projection" and the "central projection".
2) The eta axis points due north in the adopted coordinate system.
If the direction cosines represent observed (RA,Dec), the tangent
plane coordinates (xi,eta) are conventionally called the
"standard coordinates". If the direction cosines are with
respect to a right-handed triad, (xi,eta) are also right-handed.
The units of (xi,eta) are, effectively, radians at the tangent
point.
3) The vector v must be of unit length or the result will be wrong.
4) Cases where there is no solution can arise only near the poles.
For example, it is clearly impossible for a star at the pole
itself to have a non-zero xi value, and hence it is meaningless
to ask where the tangent point would have to be.
5) Also near the poles, cases can arise where there are two useful
solutions. The return value indicates whether the second of the
two solutions returned is useful; 1 indicates only one useful
solution, the usual case.
6) The basis of the algorithm is to solve the spherical triangle
PSC, where P is the north celestial pole, S is the star and C is
the tangent point. Calling the celestial spherical coordinates
of the star and tangent point (a,b) and (a0,b0) respectively, and
writing rho^2 = (xi^2+eta^2) and r^2 = (1+rho^2), and
transforming the vector v into (a,b) in the normal way, side c is
then (pi/2-b), side p is sqrt(xi^2+eta^2) and side s (to be
found) is (pi/2-b0), while angle C is given by sin(C) = xi/rho
and cos(C) = eta/rho; angle P (to be found) is (a-a0). After
solving the spherical triangle, the result (a0,b0) can be
expressed in vector form as v0.
7) This function is a member of the following set:
spherical vector solve for
iauTpxes iauTpxev xi,eta
iauTpsts iauTpstv star
iauTpors > iauTporv < origin
References:
Calabretta M.R. & Greisen, E.W., 2002, "Representations of
celestial coordinates in FITS", Astron.Astrophys. 395, 1077
Green, R.M., "Spherical Astronomy", Cambridge University Press,
1987, Chapter 13.
*/
func Tporv(xi, eta float64, v [3]float64, v01, v02 *[3]float64) int {
var x, y, z, rxy2, xi2, eta2p1, r, rsb, rcb, w2, w, c float64
x = v[0]
y = v[1]
z = v[2]
rxy2 = x*x + y*y
xi2 = xi * xi
eta2p1 = eta*eta + 1.0
r = sqrt(xi2 + eta2p1)
rsb = r * z
rcb = r * sqrt(x*x+y*y)
w2 = rcb*rcb - xi2
if w2 > 0.0 {
w = sqrt(w2)
c = (rsb*eta + w) / (eta2p1 * sqrt(rxy2*(w2+xi2)))
v01[0] = c * (x*w + y*xi)
v01[1] = c * (y*w - x*xi)
v01[2] = (rsb - eta*w) / eta2p1
w = -w
c = (rsb*eta + w) / (eta2p1 * sqrt(rxy2*(w2+xi2)))
v02[0] = c * (x*w + y*xi)
v02[1] = c * (y*w - x*xi)
v02[2] = (rsb - eta*w) / eta2p1
if fabs(rsb) < 1.0 {
return 1
} else {
return 2
}
} else {
return 0
}
}