public Coordinate_Cartesian CoordinateRotation(Coordinate_Cartesian cartesian, double angle, RotationAround rotationAround)
        {
            Coordinate_Cartesian cartesian_ = new Coordinate_Cartesian();

            if (rotationAround == RotationAround.X)
            {
                double alpha = angle;
                cartesian_.X = cartesian.X;
                cartesian_.Y = cartesian.Y * Math.Cos(alpha) - cartesian.Z * Math.Sin(alpha);
                cartesian_.Z = cartesian.Y * Math.Sin(alpha) + cartesian.Z * Math.Cos(alpha);
            }
            else if (rotationAround == RotationAround.Y)
            {
                double beta = angle;
                cartesian_.X = cartesian.X * Math.Cos(beta) + cartesian.Z * Math.Sin(beta);
                cartesian_.Y = cartesian.Y;
                cartesian_.Z = -cartesian.X * Math.Sin(beta) + cartesian.Z * Math.Cos(beta);
            }
            else if (rotationAround == RotationAround.Z)
            {
                double gamma = angle;
                cartesian_.X = cartesian.X * Math.Cos(gamma) + cartesian.Y * Math.Sin(gamma);
                cartesian_.Y = -cartesian.X * Math.Sin(gamma) + cartesian.Y * Math.Cos(gamma);
                cartesian_.Z = cartesian.Z;
            }

            return(cartesian_);
        }
        /// <summary>
        /// Coordinate transformation, from spherical to cartesion.
        /// </summary>
        /// <param name="spherical">Sperical coordinate: R, Theta: 90°..-90°, Phi: 0°..360°; angles in radians.</param>
        /// <returns>Cartesian coordinate: X,Y,Z.</returns>
        public Coordinate_Cartesian CoordinateTransformation_SphericalToCartesion(Coordinate_Sperical spherical)
        {
            Coordinate_Cartesian cartesian = new Coordinate_Cartesian();

            cartesian.X = spherical.R * Math.Cos(spherical.Theta) * Math.Cos(spherical.Phi);
            cartesian.Y = spherical.R * Math.Cos(spherical.Theta) * Math.Sin(spherical.Phi);;
            cartesian.Z = spherical.R * Math.Sin(spherical.Theta);

            return(cartesian);
        }
        /// <summary>
        ///  Coordinate transformation, from cartesion to spherical.
        /// </summary>
        /// <param name="cartesian">Cartesian coordinate: X,Y,Z.</param>
        /// <returns>Sperical coordinate: R, Theta: 90°..-90°, Phi: 0°..360°; angles in radians.</returns>
        public Coordinate_Sperical CoordinateTransformation_CartesionToSpherical(Coordinate_Cartesian cartesian)
        {
            Coordinate_Sperical spherical = new Coordinate_Sperical();

            spherical.R     = Math.Sqrt((cartesian.X * cartesian.X + cartesian.Y * cartesian.Y + cartesian.Z * cartesian.Z));
            spherical.Theta = Math.Asin(cartesian.Z / spherical.R);
            spherical.Phi   = Math.Atan2(cartesian.Y, cartesian.X);
            if (spherical.Phi < 0)
            {
                spherical.Phi = 2 * Math.PI + spherical.Phi;
            }
            return(spherical);
        }