For my own project, I need a bunch of things that mechjeb's VesselState helpfully defines - things like a north/east/up coordinate system, velocity vectors in various reference frames, and vectors for various useful attitudes (radial, normal etc.). I'm having trouble grokking the definition and use of surfaceRotation. From the code (I'll assume for the discussion that we're analyzing a ship in a standard 100km orbit around Kerbin): // Define a coordinate system in which up is away from the planet, east is in the direction of // the planet's rotation, and north points north-ish (while remaining normal to east/up). public Vector3d east, north, up; public Vector3d CoM; // Vessel's center of mass. // ??? public Quaternion surfaceRotation = Quaternion.LookRotation(north, up); // Velocity in the universe inertial reference frame. public Vector3d velocityVesselOrbit = vessel.orbit.GetVel(); // Velocity in the planet's rotating reference frame, i.e. velocity relative to the surface. public Vector3d velocityVesselSurface = velocityVesselOrbit - vessel.mainBody.getRFrmVel(CoM); // ??? public Vector3d velocityMainBodySurface = rotationSurface * velocityVesselSurface; My current understanding is that surfaceRotation defines a rotation that would take the world coordinate system and rotate it such that, standing on the point of Kerbin directly below the ship, the Y axis increases away from the surface and X increases with latitude. Then, we move on to the velocity vectors. velocityVesselOrbit is the ship's velocity vector in Unity world coordinates, roughly equivalent to an inertial reference frame anchored to the planet's center (this ignores the fact that the world origin moves around to maintain floating point precision, but everything is consistent within one physics update). velocityVesselSurface is the ship's velocity vector in the planet's rotating reference frame, in other words speed relative to the point of the planet's surface directly below. And finally, velocityMainBodySurface... Assuming my understanding of surfaceRotation is correct, I think that this just transforms the rotating frame velocity vector to a coordinate system where Y is away from the surface, instead of Y being an arbitrary direction defined by Unity. In other words, if you plunk a Jeb down at the point directly below the ship, he would say that the vessel is moving at velocityMainBodySurface relative to him, assuming that X is north and Y is up into the sky, and Z is whatever direction matches unity's coordinate handedness. Does all this sound correct? velocityMainBodySurface isn't used in MJ as far as I can tell, so all I have to go on is what I think I understand of quaternions and Unity's coordinate system.