Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion include/geode/geometry/angle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,21 @@

#include <geode/geometry/common.hpp>

namespace geode
{
FORWARD_DECLARATION_DIMENSION_CLASS( Vector );
ALIAS_3D( Vector );
} // namespace geode

namespace geode
{
class opengeode_geometry_api Angle
{
public:
[[nodiscard]] static Angle create_from_radians( double radians );
[[nodiscard]] static Angle create_from_degrees( double degrees );
[[nodiscard]] static Angle create_from_vectors(
const Vector3D& vector1, const Vector3D& vector2 );

[[nodiscard]] double radians() const;
[[nodiscard]] double degrees() const;
Expand All @@ -57,7 +65,7 @@ namespace geode
[[nodiscard]] Angle normalized_between_0_and_pi() const;

private:
explicit Angle( double radians ) : radians_( radians ) {}
explicit Angle( double radians );

private:
double radians_;
Expand Down
21 changes: 19 additions & 2 deletions src/geode/geometry/angle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,46 @@

#include <geode/geometry/angle.hpp>

#include <geode/geometry/vector.hpp>

namespace
{
double radians_to_degrees( double radians )
{
return radians * 180. / M_PI;

Check warning on line 32 in src/geode/geometry/angle.cpp

View workflow job for this annotation

GitHub Actions / test / tidy

src/geode/geometry/angle.cpp:32:26 [cppcoreguidelines-avoid-magic-numbers]

180. is a magic number; consider replacing it with a named constant
}
double degrees_to_radians( double degree )
{
return degree * M_PI / 180.;

Check warning on line 36 in src/geode/geometry/angle.cpp

View workflow job for this annotation

GitHub Actions / test / tidy

src/geode/geometry/angle.cpp:36:32 [cppcoreguidelines-avoid-magic-numbers]

180. is a magic number; consider replacing it with a named constant
}
constexpr double TWO_PI = 2. * M_PI;
} // namespace

namespace geode
{
Angle::Angle( double radians )
: radians_( std::isnan( radians ) ? 0 : radians )
{
}

Angle Angle::create_from_radians( double radians )
{
return Angle( radians );
return Angle{ radians };
}

Angle Angle::create_from_degrees( double degrees )
{
return Angle( degrees_to_radians( degrees ) );
return Angle{ degrees_to_radians( degrees ) };
}

Angle Angle::create_from_vectors(
const Vector3D& vector1, const Vector3D& vector2 )
{
const auto prev = vector1.normalize();
const auto next = vector2.normalize();
const auto dot = std::clamp( prev.dot( next ), -1.0, 1.0 );
const auto angle = std::acos( dot );
return Angle{ angle };
}

double Angle::radians() const
Expand Down
Loading