summaryrefslogtreecommitdiff
path: root/include/raymath.h
diff options
context:
space:
mode:
authorjussi2023-04-06 19:19:44 +0300
committerjussi2023-04-06 19:19:44 +0300
commitfe15e836bd87963d10bd301a3a24652763059e0d (patch)
treea3bd6dbfcadfb3a5ba10a173d443da0595386d19 /include/raymath.h
parent2526c9732e7ea35bc9ed3e43a4db77b7e6364c5a (diff)
downloadreilua-enhanced-fe15e836bd87963d10bd301a3a24652763059e0d.tar.gz
reilua-enhanced-fe15e836bd87963d10bd301a3a24652763059e0d.tar.bz2
reilua-enhanced-fe15e836bd87963d10bd301a3a24652763059e0d.zip
Switched to Raylib vertion 4.5. Removed some functions and added others. Main changes to camera3D.
Diffstat (limited to 'include/raymath.h')
-rw-r--r--include/raymath.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/include/raymath.h b/include/raymath.h
index fbe4cea..422a42e 100644
--- a/include/raymath.h
+++ b/include/raymath.h
@@ -25,7 +25,7 @@
*
* LICENSE: zlib/libpng
*
-* Copyright (c) 2015-2022 Ramon Santamaria (@raysan5)
+* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
@@ -306,10 +306,33 @@ RMAPI float Vector2DistanceSqr(Vector2 v1, Vector2 v2)
return result;
}
-// Calculate angle from two vectors
+// Calculate angle between two vectors
+// NOTE: Angle is calculated from origin point (0, 0)
RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
{
- float result = atan2f(v2.y, v2.x) - atan2f(v1.y, v1.x);
+ float result = atan2f(v2.y - v1.y, v2.x - v1.x);
+
+ return result;
+}
+
+// Calculate angle defined by a two vectors line
+// NOTE: Parameters need to be normalized
+// Current implementation should be aligned with glm::angle
+RMAPI float Vector2LineAngle(Vector2 start, Vector2 end)
+{
+ float result = 0.0f;
+
+ float dot = start.x*end.x + start.y*end.y; // Dot product
+
+ float dotClamp = (dot < -1.0f)? -1.0f : dot; // Clamp
+ if (dotClamp > 1.0f) dotClamp = 1.0f;
+
+ result = acosf(dotClamp);
+
+ // Alternative implementation, more costly
+ //float v1Length = sqrtf((start.x*start.x) + (start.y*start.y));
+ //float v2Length = sqrtf((end.x*end.x) + (end.y*end.y));
+ //float result = -acosf((start.x*end.x + start.y*end.y)/(v1Length*v2Length));
return result;
}
@@ -889,7 +912,7 @@ RMAPI Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view)
{
Vector3 result = { 0 };
- // Calculate unproject matrix (multiply view patrix by projection matrix) and invert it
+ // Calculate unprojected matrix (multiply view matrix by projection matrix) and invert it
Matrix matViewProj = { // MatrixMultiply(view, projection);
view.m0*projection.m0 + view.m1*projection.m4 + view.m2*projection.m8 + view.m3*projection.m12,
view.m0*projection.m1 + view.m1*projection.m5 + view.m2*projection.m9 + view.m3*projection.m13,
@@ -952,7 +975,7 @@ RMAPI Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view)
// Create quaternion from source point
Quaternion quat = { source.x, source.y, source.z, 1.0f };
- // Multiply quat point by unproject matrix
+ // Multiply quat point by unprojecte matrix
Quaternion qtransformed = { // QuaternionTransform(quat, matViewProjInv)
matViewProjInv.m0*quat.x + matViewProjInv.m4*quat.y + matViewProjInv.m8*quat.z + matViewProjInv.m12*quat.w,
matViewProjInv.m1*quat.x + matViewProjInv.m5*quat.y + matViewProjInv.m9*quat.z + matViewProjInv.m13*quat.w,