Commit Graph

2227 Commits

Author SHA1 Message Date
Don Cross
ab8d8ba295 Python: Starting to port new rotation code.
Split _precession into _precession_rot/_precession.
Split _nutation into _nutation_rot/_nutation.
Removed trailing whitespace from readme.
2019-12-15 11:34:16 -05:00
Don Cross
dc2e561e41 JS: Added rotation functions to documentation topic index. 2019-12-15 10:44:36 -05:00
Don Cross
0c11c626de Fixed typo in C function topic index. 2019-12-14 22:08:26 -05:00
Don Cross
1971e4d7b5 C: Added coordinate transform functions to topic index. 2019-12-14 22:05:30 -05:00
Don Cross
4fc2787569 JS: Added demo program horizon.js. 2019-12-14 21:16:43 -05:00
Don Cross
ef633967e3 C, JS: continued eliminating redunancies in precession, nutation. 2019-12-14 20:18:45 -05:00
Don Cross
e7d8804bf1 C: Eliminated duplicate code - nutation() is based on nutation_rot().
Instead of having the same calculations duplicated in both
nutation() and nutation_rot(), I reworked nutation() in terms of
nutation_rot(). Use nutation_rot() to calculate the rotation matrix,
then multiply that matrix by the input vector to produce the output vector.
2019-12-14 18:15:13 -05:00
Don Cross
c4a537a236 C: Fixed some code documentation mistakes. 2019-12-14 17:24:19 -05:00
Don Cross
7b7c28bced C: Added Astronomy_VectorFromEquator and Astronomy_EquatorFromVector.
These helper routines in the JavaScript code make sense for C also.
2019-12-14 17:20:32 -05:00
Don Cross
55e2a52004 JS: Added RefractionTest. Removed unnecessary typecast from C RefractionTest. 2019-12-14 15:16:07 -05:00
Don Cross
8b11d9d5e7 JS: Finished rotation unit tests. 2019-12-14 14:58:47 -05:00
Don Cross
e7d1b4bc25 JS: More work in progress - rotation unit tests. 2019-12-14 14:55:09 -05:00
Don Cross
185a872082 JS: Added helper function EquatorFromVector. 2019-12-14 14:44:29 -05:00
Don Cross
7307c99280 JS: Added function VectorFromEquator to convert equatorial coordinates to vector. 2019-12-14 14:36:56 -05:00
Don Cross
46fa5174a2 JS: Added factory function MakeRotation.
There was no way for outside callers to directly instantiate
a RotationMatrix object. Provided the factory function MakeRotation.
2019-12-14 14:19:25 -05:00
Don Cross
a7c5b9ef48 C rotation test: missed checking threshold. 2019-12-13 21:07:38 -05:00
Don Cross
32f5567254 JS: More unit testing of rotation. Fixed a couple more bugs it uncovered. 2019-12-13 21:06:52 -05:00
Don Cross
8e0d88aa18 Fixed completely wrong threshold in C RefractionTest. 2019-12-13 20:26:13 -05:00
Don Cross
690d3d0528 JS: More unit testing of rotation. Fixed a couple of bugs. 2019-12-13 20:18:48 -05:00
Don Cross
68f816f0a8 JS: Added unit test for matrix multiplication. 2019-12-13 19:27:19 -05:00
Don Cross
8322975e15 JS: Added inverse matrix unit test. Fixed bugs it uncovered. 2019-12-13 07:21:24 -05:00
Don Cross
13041b735e JS: Finished porting rotation functions. Not yet tested. 2019-12-12 21:30:54 -05:00
Don Cross
d6ab8b5148 JS: Beginning to port vector rotation code from C. 2019-12-12 17:16:17 -05:00
Don Cross
bafaa78133 Trimmed trailing whitespace in pydown.py. 2019-12-12 14:53:51 -05:00
Don Cross
52db7cd898 Fixing travis-ci build error: looks like they changed gcc-6.
The gcc-6 compiler in travis-ci has changed its behavior.
It is warning that 'fmid' local variable in Search() may
be used uninitialized. I believe it is safe but I'm adding
an initialization to fmid to make the warning go away.
2019-12-12 13:52:58 -05:00
Don Cross
c55330cb60 Corrected the wording of the readme file for demo program horizon.c. 2019-12-12 12:37:24 -05:00
Don Cross
c008dcdff6 Finished C demo program horizon.c.
This program demonstrates converting ecliptic coordinates
to horizontal coordinates at a given time for a given observer.
It searches for the two locations on the horizon where the
ecliptic plane intersects it.
2019-12-12 12:35:00 -05:00
Don Cross
9b0a9fcd78 C: Added Astronomy_VectorFromHorizon. 2019-12-10 20:55:27 -05:00
Don Cross
696dbbaa5d C: Implemented Astronomy_InverseRefraction. 2019-12-10 20:20:31 -05:00
Don Cross
824792004d Starting to work on inverse function for refraction calculation.
I need a way to undo a refraction correction:
given a post-refraction altitude, find the unrefracted
altitude that leads to it. Starting to write the code.
Not finished yet.
2019-12-10 17:58:38 -05:00
Don Cross
8b0827e1e8 C: Added Astronomy_Refraction function to calculate refraction.
This function eliminates duplicate code and exposes the refraction
formula to outside callers.
2019-12-10 13:26:30 -05:00
Don Cross
55d4cc3dde C: Added Astronomy_Rotation_EQD_ECL, ECL_EQD, HOR_ECL, ECL_HOR.
These are the final 4 rotation functions to complete every
possible coordinate transform.

Finished unit tests of verifying that all triangular
cycles of transitive rotation are consistent.
2019-12-09 16:53:02 -05:00
Don Cross
6876aee963 Working on Test_RotRoundTrip, a unit test to exercise all orientation transforms.
The idea in this test will be to verify that all the transitive
sequences of rotations produce consistent results.
Currently, I verify that the supported translations produce
an identity matrix when composed with their inverses.
2019-12-09 15:34:14 -05:00
Don Cross
4c368f3d75 C: Implemented Astronomy_Rotation_EQJ_HOR. 2019-12-09 14:45:04 -05:00
Don Cross
cdcdfe7762 Fixed bug in Astronomy_CombineRotation. Implemented Astronomy_Rotation_HOR_EQJ.
Astronomy_CombineRotation was multiplying matrices correctly,
but it was doing it in the backwards order from what I need.
I forgot that to rotate a vector V by a matrix M, you multiply M*V,
with the matrix on the left.
Likewise, to rotate a matrix A by another matrix B, you need B*A, not A*B.
This explains why I was seeing larger than expected errors combining
nutation and precession: nutation is a very tiny shift in orientation,
so the errors were small but noticeable. Tightened the error thresholds
in the unit test code.

Astronomy_Rotation_HOR_EQJ converts from horizontal of-date coordinates
to equatorial J2000 coordinates. Here I could no longer ignore the
errors caused by having backwards matrix multiplication, leading
to discovering the problem in Astronomy_CombineRotation.
2019-12-09 12:47:43 -05:00
Don Cross
0aa80dbf6f C: Implemented Astronomy_Rotation_HOR_EQD. 2019-12-09 11:18:15 -05:00
Don Cross
4399e72334 Added Astronomy_HorizonFromVector, Astronomy_Rotation_EQD_HOR.
Astronomy_HorizonFromVector is a specialized variant of
Astronomy_SphereFromVector that flips the orientation of the
azimuth angle to the more traditional clockwise-from-north
direction used in navigation and cartography.
It also allows the same optional refraction correction as
Astronomy_Horizon.

Astronomy_Rotation_EQD_HOR converts a equatorial-of-date vector
to a horizontal vector. The horizontal vector has the following
components:
    x = North
    y = West
    z = Zenith

Removed trailing whitespace in generate.c.
2019-12-09 11:06:02 -05:00
Don Cross
212c60b633 C: Implemented Astronomy_Rotation_EQD_EQJ. 2019-12-08 20:41:01 -05:00
Don Cross
78da9a9879 Added C rotation test to the Windows version of the unit test. 2019-12-08 20:30:38 -05:00
Don Cross
e6b4b75ac0 Added extra sanity checks for rotation matrices.
All rotation matrices must have unit vectors for all rows and columns.
2019-12-08 20:04:25 -05:00
Don Cross
cd545033ae C: Added Astronomy_Rotation_EQJ_EQD(). 2019-12-08 19:48:43 -05:00
Don Cross
bf7e958152 C: Implemented Astronomy_Rotation_ECL_EQJ.
This function returns the rotation matrix for
converting ecliptic J2000 coordinates to equatorial J2000.
2019-12-08 16:44:43 -05:00
Don Cross
dd39803180 C: Implemented Astronomy_Rotation_EQJ_ECL.
This function returns the constant rotation matrix that converts
equatorial J2000 coordinates to ecliptic J2000 coordinates.
Verified that it is exactly consistent with existing Ecliptic().
2019-12-08 15:49:29 -05:00
Don Cross
f493707e6d C: Implemented Astronomy_RotateVector.
Astronomy_RotateVector translates a vector in one orientation
to another orientation, as specified by a rotation matrix.
I will use this to implement all the coordinate transforms
among EQJ, EQD, ECL, HOR.
2019-12-08 15:13:55 -05:00
Don Cross
65e3e931c9 C: Implemented Astronomy_SphereFromVector.
Implemented C function that converts cartesian vector to spherical coordinates.
2019-12-08 14:17:23 -05:00
Don Cross
bca3f808ae C: Added Astronomy_VectorFromSphere, astro_spherical_t.
Added new data type astro_spherical_t that represents generic spherical coordinates.
Implemented Astronomy_VectorFromSphere to convert spherical coordinates
to Cartesian coordinates. Included unit test to verify it is working as expected.
2019-12-08 13:48:27 -05:00
Don Cross
63ae582893 ctest: Added unit test for Astronomy_InverseRotation. 2019-12-08 11:43:42 -05:00
Don Cross
59c442a1ce ctest: Factored out function for verifying that two matrices are equal. 2019-12-08 11:38:11 -05:00
Don Cross
ae0946bd47 Implemented C versions of Astronomy_CombineRotation, Astronomy_InverseRotation.
Beginning to implement functions for converting among the
following four orientation systems:

- EQJ: equatorial J2000
- EQD: equatorial of date
- ECL: ecliptic J2000
- HOR: horizontal

Starting with some basic functions for manipulating rotation matrices.
Astronomy_CombineRotation multiplies two rotation matrices to obtain
a third that combines their effects in order. I will use these for
combining a precession matrix and a nutation matrix, to obtain a
rotation matrix that can convert between EQJ and EQD.

Astronomy_InverseRotation will allow converting in either direction
between two orientations.
2019-12-08 11:26:59 -05:00
Don Cross
0aeb875ec5 C#: Implemented SearchPeakMagnitude. 2019-12-01 11:41:48 -05:00