Use our own PI
diff --git a/include/rive/math/math_types.hpp b/include/rive/math/math_types.hpp
new file mode 100644
index 0000000..ec5545d
--- /dev/null
+++ b/include/rive/math/math_types.hpp
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2022 Rive
+ */
+
+#ifndef _RIVE_MATH_TYPES_DEFINED_
+#define _RIVE_MATH_TYPES_DEFINED_
+
+#include "rive/rive_types.hpp"
+#include <cmath>
+
+namespace rive {
+
+namespace math {
+ constexpr float PI = 3.14159265f;
+}
+
+}
+
+#endif
diff --git a/src/constraints/ik_constraint.cpp b/src/constraints/ik_constraint.cpp
index fc75ff0..ed049ec 100644
--- a/src/constraints/ik_constraint.cpp
+++ b/src/constraints/ik_constraint.cpp
@@ -1,8 +1,8 @@
#include "rive/constraints/ik_constraint.hpp"
#include "rive/bones/bone.hpp"
#include "rive/artboard.hpp"
+#include "rive/math/math_types.hpp"
#include <algorithm>
-#include <math.h> // M_PI
using namespace rive;
@@ -139,17 +139,17 @@
if (invertDirection()) {
r1 = std::atan2(cv[1], cv[0]) - A;
- r2 = -C + M_PI + angleCorrection;
+ r2 = -C + math::PI + angleCorrection;
} else {
r1 = A + std::atan2(cv[1], cv[0]);
- r2 = C - M_PI + angleCorrection;
+ r2 = C - math::PI + angleCorrection;
}
} else if (invertDirection()) {
r1 = std::atan2(cv[1], cv[0]) - A;
- r2 = -C + M_PI;
+ r2 = -C + math::PI;
} else {
r1 = A + std::atan2(cv[1], cv[0]);
- r2 = C - M_PI;
+ r2 = C - math::PI;
}
constrainRotation(*fk1, r1);
@@ -237,13 +237,13 @@
// At the end, mix the FK angle with the IK angle by strength
if (strength() != 1.0f) {
for (BoneChainLink& fk : m_FkChain) {
- float fromAngle = std::fmod(fk.transformComponents.rotation(), (float)M_PI * 2);
- float toAngle = std::fmod(fk.angle, (float)M_PI * 2);
+ float fromAngle = std::fmod(fk.transformComponents.rotation(), math::PI * 2);
+ float toAngle = std::fmod(fk.angle, math::PI * 2);
float diff = toAngle - fromAngle;
- if (diff > M_PI) {
- diff -= M_PI * 2;
- } else if (diff < -M_PI) {
- diff += M_PI * 2;
+ if (diff > math::PI) {
+ diff -= math::PI * 2;
+ } else if (diff < -math::PI) {
+ diff += math::PI * 2;
}
float angle = fromAngle + diff * strength();
constrainRotation(fk, angle);
diff --git a/src/constraints/rotation_constraint.cpp b/src/constraints/rotation_constraint.cpp
index 7122ac7..85b376e 100644
--- a/src/constraints/rotation_constraint.cpp
+++ b/src/constraints/rotation_constraint.cpp
@@ -1,7 +1,7 @@
#include "rive/constraints/rotation_constraint.hpp"
#include "rive/transform_component.hpp"
#include "rive/math/mat2d.hpp"
-#include <cmath>
+#include "rive/math_types.hpp"
using namespace rive;
@@ -69,14 +69,14 @@
m_ComponentsB = transformB.decompose();
}
- float angleA = std::fmod(m_ComponentsA.rotation(), (float)M_PI * 2);
- float angleB = std::fmod(m_ComponentsB.rotation(), (float)M_PI * 2);
+ float angleA = std::fmod(m_ComponentsA.rotation(), math::PI * 2);
+ float angleB = std::fmod(m_ComponentsB.rotation(), math::PI * 2);
float diff = angleB - angleA;
- if (diff > M_PI) {
- diff -= M_PI * 2;
- } else if (diff < -M_PI) {
- diff += M_PI * 2;
+ if (diff > math::PI) {
+ diff -= math::PI * 2;
+ } else if (diff < -math::PI) {
+ diff += math::PI * 2;
}
m_ComponentsB.rotation(m_ComponentsA.rotation() + diff * strength());
diff --git a/src/constraints/transform_constraint.cpp b/src/constraints/transform_constraint.cpp
index 988c34a..ffa1035 100644
--- a/src/constraints/transform_constraint.cpp
+++ b/src/constraints/transform_constraint.cpp
@@ -1,7 +1,7 @@
#include "rive/constraints/transform_constraint.hpp"
#include "rive/transform_component.hpp"
#include "rive/math/mat2d.hpp"
-#include <cmath>
+#include "rive/math/math_types.hpp"
using namespace rive;
@@ -29,13 +29,13 @@
m_ComponentsA = transformA.decompose();
m_ComponentsB = transformB.decompose();
- float angleA = std::fmod(m_ComponentsA.rotation(), (float)M_PI * 2);
- float angleB = std::fmod(m_ComponentsB.rotation(), (float)M_PI * 2);
+ float angleA = std::fmod(m_ComponentsA.rotation(), math::PI * 2);
+ float angleB = std::fmod(m_ComponentsB.rotation(), math::PI * 2);
float diff = angleB - angleA;
- if (diff > M_PI) {
- diff -= M_PI * 2;
- } else if (diff < -M_PI) {
- diff += M_PI * 2;
+ if (diff > math::PI) {
+ diff -= math::PI * 2;
+ } else if (diff < -math::PI) {
+ diff += math::PI * 2;
}
float t = strength();
diff --git a/src/shapes/polygon.cpp b/src/shapes/polygon.cpp
index f5704e6..aabfef4 100644
--- a/src/shapes/polygon.cpp
+++ b/src/shapes/polygon.cpp
@@ -1,6 +1,7 @@
#include "rive/shapes/polygon.hpp"
#include "rive/shapes/star.hpp"
#include "rive/shapes/straight_vertex.hpp"
+#include "rive/math/math_types.hpp"
#include <cmath>
using namespace rive;
@@ -22,8 +23,8 @@
auto ox = -originX() * width() + halfWidth;
auto oy = -originY() * height() + halfHeight;
- auto angle = -M_PI / 2;
- auto inc = 2 * M_PI / points();
+ auto angle = -math::PI / 2;
+ auto inc = 2 * -math::PI / points();
for (StraightVertex& vertex : m_PolygonVertices) {
vertex.x(ox + cos(angle) * halfWidth);
diff --git a/src/shapes/star.cpp b/src/shapes/star.cpp
index 18d4910..2705eb1 100644
--- a/src/shapes/star.cpp
+++ b/src/shapes/star.cpp
@@ -1,5 +1,6 @@
#include "rive/shapes/star.hpp"
#include "rive/shapes/straight_vertex.hpp"
+#include "rive/math/math_types.hpp"
#include <cmath>
#include <cstdio>
@@ -20,8 +21,8 @@
auto oy = -originY() * height() + halfHeight;
std::size_t length = vertexCount();
- auto angle = -M_PI / 2;
- auto inc = 2 * M_PI / length;
+ auto angle = -math::PI / 2;
+ auto inc = 2 * math::PI / length;
for (std::size_t i = 0; i < length; i += 2) {
{