void FGLocation::SetLongitude(double longitude)
{
- double rtmp = sqrt(mECLoc(eX)*mECLoc(eX) + mECLoc(eY)*mECLoc(eY));
+ double rtmp = mECLoc.Magnitude(eX, eY);
+ // Check if we have zero radius.
+ // If so set it to 1, so that we can set a position
+ if (0.0 == mECLoc.Magnitude())
+ rtmp = 1.0;
+
// Fast return if we are on the north or south pole ...
if (rtmp == 0.0)
return;
mCacheValid = false;
- mECLoc(eX) = rtmp*sin(longitude);
- mECLoc(eY) = rtmp*cos(longitude);
+ mECLoc(eX) = rtmp*cos(longitude);
+ mECLoc(eY) = rtmp*sin(longitude);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
r = 1.0;
}
- double rtmp = sqrt(mECLoc(eX)*mECLoc(eX) + mECLoc(eY)*mECLoc(eY));
+ double rtmp = mECLoc.Magnitude(eX, eY);
if (rtmp != 0.0) {
double fac = r/rtmp*cos(latitude);
mECLoc(eX) *= fac;