summaryrefslogtreecommitdiffstats
path: root/ast/erfa/pap.c
diff options
context:
space:
mode:
Diffstat (limited to 'ast/erfa/pap.c')
-rw-r--r--ast/erfa/pap.c148
1 files changed, 148 insertions, 0 deletions
diff --git a/ast/erfa/pap.c b/ast/erfa/pap.c
new file mode 100644
index 0000000..afd8651
--- /dev/null
+++ b/ast/erfa/pap.c
@@ -0,0 +1,148 @@
+#include "erfa.h"
+
+double eraPap(double a[3], double b[3])
+/*
+** - - - - - - -
+** e r a P a p
+** - - - - - - -
+**
+** Position-angle from two p-vectors.
+**
+** Given:
+** a double[3] direction of reference point
+** b double[3] direction of point whose PA is required
+**
+** Returned (function value):
+** double position angle of b with respect to a (radians)
+**
+** Notes:
+**
+** 1) The result is the position angle, in radians, of direction b with
+** respect to direction a. It is in the range -pi to +pi. The
+** sense is such that if b is a small distance "north" of a the
+** position angle is approximately zero, and if b is a small
+** distance "east" of a the position angle is approximately +pi/2.
+**
+** 2) The vectors a and b need not be of unit length.
+**
+** 3) Zero is returned if the two directions are the same or if either
+** vector is null.
+**
+** 4) If vector a is at a pole, the result is ill-defined.
+**
+** Called:
+** eraPn decompose p-vector into modulus and direction
+** eraPm modulus of p-vector
+** eraPxp vector product of two p-vectors
+** eraPmp p-vector minus p-vector
+** eraPdp scalar product of two p-vectors
+**
+** Copyright (C) 2013-2016, NumFOCUS Foundation.
+** Derived, with permission, from the SOFA library. See notes at end of file.
+*/
+{
+ double am, au[3], bm, st, ct, xa, ya, za, eta[3], xi[3], a2b[3], pa;
+
+
+/* Modulus and direction of the a vector. */
+ eraPn(a, &am, au);
+
+/* Modulus of the b vector. */
+ bm = eraPm(b);
+
+/* Deal with the case of a null vector. */
+ if ((am == 0.0) || (bm == 0.0)) {
+ st = 0.0;
+ ct = 1.0;
+ } else {
+
+ /* The "north" axis tangential from a (arbitrary length). */
+ xa = a[0];
+ ya = a[1];
+ za = a[2];
+ eta[0] = -xa * za;
+ eta[1] = -ya * za;
+ eta[2] = xa*xa + ya*ya;
+
+ /* The "east" axis tangential from a (same length). */
+ eraPxp(eta, au, xi);
+
+ /* The vector from a to b. */
+ eraPmp(b, a, a2b);
+
+ /* Resolve into components along the north and east axes. */
+ st = eraPdp(a2b, xi);
+ ct = eraPdp(a2b, eta);
+
+ /* Deal with degenerate cases. */
+ if ((st == 0.0) && (ct == 0.0)) ct = 1.0;
+ }
+
+/* Position angle. */
+ pa = atan2(st, ct);
+
+ return pa;
+
+}
+/*----------------------------------------------------------------------
+**
+**
+** Copyright (C) 2013-2016, NumFOCUS Foundation.
+** All rights reserved.
+**
+** This library is derived, with permission, from the International
+** Astronomical Union's "Standards of Fundamental Astronomy" library,
+** available from http://www.iausofa.org.
+**
+** The ERFA version is intended to retain identical functionality to
+** the SOFA library, but made distinct through different function and
+** file names, as set out in the SOFA license conditions. The SOFA
+** original has a role as a reference standard for the IAU and IERS,
+** and consequently redistribution is permitted only in its unaltered
+** state. The ERFA version is not subject to this restriction and
+** therefore can be included in distributions which do not support the
+** concept of "read only" software.
+**
+** Although the intent is to replicate the SOFA API (other than
+** replacement of prefix names) and results (with the exception of
+** bugs; any that are discovered will be fixed), SOFA is not
+** responsible for any errors found in this version of the library.
+**
+** If you wish to acknowledge the SOFA heritage, please acknowledge
+** that you are using a library derived from SOFA, rather than SOFA
+** itself.
+**
+**
+** TERMS AND CONDITIONS
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions
+** are met:
+**
+** 1 Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+**
+** 2 Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+**
+** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
+** the International Astronomical Union nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+** POSSIBILITY OF SUCH DAMAGE.
+**
+*/