public Quaternion Parse( string quat )
{
// the format is "Quaternion(w, x, y, z)"
if ( !quat.StartsWith( "Quaternion(" ) )
throw new FormatException();
string[] values = quat.Substring( 11 ).TrimEnd( ')' ).Split( ',' );
return new Quaternion( Real.Parse( values[ 0 ], CultureInfo.InvariantCulture ),
Real.Parse( values[ 1 ], CultureInfo.InvariantCulture ),
Real.Parse( values[ 2 ], CultureInfo.InvariantCulture ),
Real.Parse( values[ 3 ], CultureInfo.InvariantCulture ) );
}