   Cutting up extremely large numbers when working with rotational positioning
  The Game I'm working on is supposed to let you walk around and fly around on a planet. In order to do this, every object on a planet, flying around above the planet, or in orbit of the planet defines its position with a special OrbitPosition, which has a Quaternion and a Distance. In order to move a certain distance, it divides the velocity by Distance and pitches the Quaternion by that amount (Roll is used to change direction). It works fantastically.However, I wanted to give players a real sense of the scale involved in planets. So I defined 1 unit is 1 meter, increased the planet size to that of Earth, gave it the correct rotation rate, put in the moon, properly sized, distanced, and the correct speed. I included a proxy sun that was much closer and smaller than the real one, just to give me something to call "stationary". I had to use 3 projection matrices to render them all without z-fighting. I also included a properly sized car, airplane, and Mt. Everest proxy (it's just a cylinder with the proper height).The problem, though, is that when working at these extreme values, floating-point precision becomes an issue. This was most obvious with the car and airplane, the vertices moved around to become almost voxel-like. I fixed that by transforming objects into Camera space before rendering (basically, the View matrix assumes it's a 0,0,0 and all world matrices are transformed by negative the camera's position).However, while the car now looks like a car instead of a car viewed through a pixelation censor filter, its position shutters horribly. The calculations for its position based on where it is on the rotating planet suffers from the inaccuracy.If I were using simple Cartesian coordinates (XYZ), I would break up space into a grid of cubes so that each object is accurately positioned within its parent cell.I'm not using Cartesian coordinates, I'm using Quaternion and Distance (is there a name for that?). I honestly have no idea how I could segment out this coordinate system to provide something more accurate. Does anyone have any suggestions?I'm using XNA and C# for my rendering and basic framework. As such, the Matrix, Vector3, etc, are all single floats and changing them to double floats would require significant reimplementation.   
  Use an orbital state vector maybe?http://en.wikipedia.org/wiki/Orbital_state_vectors;  Hmm. I don't really understand; that appears to be Cartesian coordinates using the planet's center point as a frame of reference. How would that help me when I need to tell an object to move 10 units and have it actually move 10 units across the surface of the sphere?If I were to to temporarily do what I'm currently doing, convert its position to a quaternion, pitch the quaternion by the distance divided by the planet's radius, then convert it back, I would still have the precision issues, right?   ;  If your units are radians or time, it should be fairly easy to compute the new position. It probably involves numerical integration of an approximation of the true movement of that body.   