/*! Get the angular velocity of the body in the universal frame. */ Vector3d Body::getAngularVelocity(double tdb) const { const TimelinePhase* phase = timeline->findPhase(tdb); Vector3d v = phase->rotationModel()->angularVelocityAtTime(tdb); ReferenceFrame* bodyFrame = phase->bodyFrame(); v = bodyFrame->getOrientation(tdb).conjugate() * v; if (!bodyFrame->isInertial()) { v += bodyFrame->getAngularVelocity(tdb); } return v; }
/*! Get the velocity of the body in the universal frame. */ Vector3d Body::getVelocity(double tdb) const { const TimelinePhase* phase = timeline->findPhase(tdb); ReferenceFrame* orbitFrame = phase->orbitFrame(); Vector3d v = phase->orbit()->velocityAtTime(tdb); v = orbitFrame->getOrientation(tdb).conjugate() * v + orbitFrame->getCenter().getVelocity(tdb); if (!orbitFrame->isInertial()) { Vector3d r = Selection(const_cast<Body*>(this)).getPosition(tdb).offsetFromKm(orbitFrame->getCenter().getPosition(tdb)); v += orbitFrame->getAngularVelocity(tdb).cross(r); } return v; }