(I'm replying to myself, but I really do have new information here: )
If you were expecting a cruithne.dll from me, I have to disappoint you. Last weekend I didn't find an easy way to increase the accuracy with a .dll.
It turns out that Orbiter
does have an option for numerical simulation instead of a simple 2-body model: this should be possible by setting the elliptic orbit setting in the config file to FALSE. However, when I tried that, the orbit was completely incorrect (Cruithne way beyond solar escape velocity leaving the solar system).
The elliptic orbit approximation isn't completely inaccurate. It's accurate enough to show the kidney-bean-shaped orbit, when visualized in a rotating frame of reference. But it isn't nearly as exotic as the complete behavior of Cruithne.
The horseshoe-movement has a period of around 390 years, which means less than 1 degree per year. So, for a short time range around 2008, the elliptical orbit should qualitatively match its true orbit (though not accurate enough for actual mission planning, which Orbiter isn't meant to do anyway).
For simulating the horseshoe motion, I thought of pre-calculating the orbital state vectors of Cruithne at intervals of one year, during an entire 390-year cycle. Then, for each point inbetween, the .dll can do an analytical 2-body simulation twice (once for the previous sample and once for the next sample), and interpolate.
The problems I encountered are the following:
- Pre-calculating the 390 samples at an accuracy that makes sense is difficult. It suggests doing a numerical simulation over this time period (with a lot of points per year), using accurate long-term positions of Earth and the other planets. Should I make a standalone program, or do it in Orbiter? Orbiter has accurate VSOP87 planetary positions, but even with max time acceleration 390 years is A LOT OF time, and I don't know how to log the position.
- I can't find any utilities in the Orbiter API for doing analytical 2-body orbiter state vector calculation (say, we have the state vector at t1, and we want to have it at t2, given the 2-body approximation). I know it's doable, but it's a lot of work, and I don't know why every add-on that needs it should re-implement it.