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); }