/// <summary>
 /// Returns true if other has the same values for x, y and z.
 /// </summary>
 /// <param name="other"><i>ICoordinate</i> with which to do the 3D comparison.</param>
 /// <returns><c>true</c> if <c>other</c> is a <c>ICoordinate</c> with the same values for x, y and z.</returns>
 public bool Equals3D(CoordinateF other)
 {
     CoordinateF coordF = other;
     if (coordF == null)
     {
         return (_x == other.X) && (_y == other.X) && ((_z == other.Z)
    || (Double.IsNaN(_z) && Double.IsNaN(other.Z)));
     }
     return (_x == coordF.X) && (_y == coordF.Y) && (_z == coordF.Z) || (float.IsNaN(_z) && float.IsNaN(coordF.Z));
 }
 /// <summary>
 /// Copies the X, Y and Z values from the CoordinateF without doing a conversion.
 /// </summary>
 /// <param name="coord">X, Y Z</param>
 public FloatVector3(CoordinateF coord)
 {
     X = coord.X;
     Y = coord.Y;
     Z = coord.Z;
 }
 /// <summary>
 /// Returns whether the planar projections of the two <i>Coordinate</i>s are equal.
 ///</summary>
 /// <param name="coordinate"><i>ICoordinate</i> with which to do the 2D comparison.</param>
 /// <returns>
 /// <c>true</c> if the x- and y-coordinates are equal;
 /// the Z coordinates do not have to be equal.
 /// </returns>
 public bool Equals2D(CoordinateF coordinate)
 {
     CoordinateF coordF = coordinate;
     if (coordF == null)
     {
         if (_x != coordinate.X)
             return false;
         if (_y != coordinate.Y)
             return false;
     }
     else
     {
         // Compare at the float level if possible.
         if (_x != coordF.X)
             return false;
         if (_y != coordF.Y)
             return false;
         
     }
     return true;
     
 }