/// @copyright /// This Source Code Form is subject to the terms of the Mozilla Public /// License, v. 2.0.If a copy of the MPL was not distributed with this /// file, You can obtain one at https ://mozilla.org/MPL/2.0/. #ifndef SPHERICAL_H #define SPHERICAL_H #include "Angle.h" #include "Polar.h" struct Vector3; namespace Passer { /// @brief A spherical vector /// @details /// This is a vector in 3D space using a spherical coordinate system. /// It consists of a distance and the polar and elevation angles from a /// reference direction. The reference direction is typically thought of /// as a forward direction. struct Spherical { public: float distance; /// @brief The angle in the horizontal plane in degrees, clockwise rotation /// @details The angle is automatically normalized to -180 .. 180 Angle horizontalAngle; /// @brief The angle in the vertical plane in degrees. Positive is upward. /// @details The angle is automatically normalized to -180 .. 180 Angle verticalAngle; /// @brief Create a new spherical vector with zero degrees and distance Spherical(); /// @brief Create a new spherical vector /// @param polarAngle The angle in the horizontal plane in degrees, /// clockwise rotation /// @param elevationAngle The angle in the vertical plan in degrees, /// zero is forward, positive is upward /// @param distance The distance in meters // Spherical(float polarAngle, float elevationAngle, float distance); Spherical(float distance, Angle horizontalAngle, Angle verticalAngle); /// @brief Convert polar coordinates to spherical coordinates /// @param polar The polar coordinate Spherical(Polar polar); /// @brief Convert 3D carthesian coordinates to spherical coordinates /// @param v Vector in 3D carthesian coordinates; Spherical(Vector3 v); /// @brief A spherical vector with zero degree angles and distance const static Spherical zero; float GetSwing(); Polar ProjectOnHorizontalPlane(); }; } // namespace Passer using namespace Passer; #include "Vector3.h" #endif