Bläddra i källkod

Remove vector division

Daniele Bartolini 10 år sedan
förälder
incheckning
90d419b1a7

+ 1 - 0
src/core/math/aabb.h

@@ -8,6 +8,7 @@
 #include "math_types.h"
 #include "vector3.h"
 #include "matrix4x4.h"
+#include "error.h"
 
 namespace crown
 {

+ 4 - 3
src/core/math/intersection.cpp

@@ -152,14 +152,15 @@ bool plane_3_intersection(const Plane& p1, const Plane& p2, const Plane& p3, Vec
 	const Vector3& n1 = p1.n;
 	const Vector3& n2 = p2.n;
 	const Vector3& n3 = p3.n;
-
-	float den = -dot(cross(n1, n2), n3);
+	const float den = -dot(cross(n1, n2), n3);
 
 	if (fequal(den, 0.0f))
 		return false;
 
+	const float inv_den = 1.0f / den;
+
 	Vector3 res = p1.d * cross(n2, n3) + p2.d * cross(n3, n1) + p3.d * cross(n1, n2);
-	ip = res / den;
+	ip = res * inv_den;
 
 	return true;
 }

+ 1 - 0
src/core/math/quaternion.cpp

@@ -4,6 +4,7 @@
  */
 
 #include "quaternion.h"
+#include "error.h"
 
 namespace crown
 {

+ 0 - 17
src/core/math/vector2.h

@@ -7,7 +7,6 @@
 
 #include "math_types.h"
 #include "math_utils.h"
-#include "error.h"
 
 namespace crown
 {
@@ -43,15 +42,6 @@ inline Vector2& operator*=(Vector2& a, float k)
 	return a;
 }
 
-inline Vector2& operator/=(Vector2& a, float k)
-{
-	CE_ASSERT(k != 0.0f, "Division by zero");
-	float inv = 1.0f / k;
-	a.x *= inv;
-	a.y *= inv;
-	return a;
-}
-
 /// Negates @a a and returns the result.
 inline Vector2 operator-(const Vector2& a)
 {
@@ -89,13 +79,6 @@ inline Vector2 operator*(float k, Vector2 a)
 	return a;
 }
 
-/// Divides the vector @a a by the scalar @a k and returns the result.
-inline Vector2 operator/(Vector2 a, float k)
-{
-	a /= k;
-	return a;
-}
-
 /// Returns true whether the vectors @a a and @a b are equal.
 inline bool operator==(const Vector2& a, const Vector2& b)
 {

+ 0 - 18
src/core/math/vector3.h

@@ -7,7 +7,6 @@
 
 #include "math_types.h"
 #include "math_utils.h"
-#include "error.h"
 
 namespace crown
 {
@@ -47,16 +46,6 @@ inline Vector3& operator*=(Vector3& a, float k)
 	return a;
 }
 
-inline Vector3& operator/=(Vector3& a, float k)
-{
-	CE_ASSERT(k != 0.0f, "Division by zero");
-	float inv = 1.0f / k;
-	a.x *= inv;
-	a.y *= inv;
-	a.z *= inv;
-	return a;
-}
-
 /// Negates @a a and returns the result.
 inline Vector3 operator-(const Vector3& a)
 {
@@ -95,13 +84,6 @@ inline Vector3 operator*(float k, Vector3 a)
 	return a;
 }
 
-/// Divides the vector @a a by the scalar @a k and returns the result.
-inline Vector3 operator/(Vector3 a, float k)
-{
-	a /= k;
-	return a;
-}
-
 /// Returns true whether the vectors @a a and @a b are equal.
 inline bool operator==(const Vector3& a, const Vector3& b)
 {

+ 0 - 19
src/core/math/vector4.h

@@ -7,7 +7,6 @@
 
 #include "math_types.h"
 #include "math_utils.h"
-#include "error.h"
 
 namespace crown
 {
@@ -64,17 +63,6 @@ inline Vector4& operator*=(Vector4& a, float k)
 	return a;
 }
 
-inline Vector4& operator/=(Vector4& a, float k)
-{
-	CE_ASSERT(k != 0.0f, "Division by zero");
-	float inv = 1.0f / k;
-	a.x *= inv;
-	a.y *= inv;
-	a.z *= inv;
-	a.w *= inv;
-	return a;
-}
-
 /// Negates @a a and returns the result.
 inline Vector4 operator-(const Vector4& a)
 {
@@ -114,13 +102,6 @@ inline Vector4 operator*(float k, Vector4 a)
 	return a;
 }
 
-/// Divides the vector @a a by the scalar @a k and returns the result.
-inline Vector4 operator/(Vector4 a, float k)
-{
-	a /= k;
-	return a;
-}
-
 /// Returns true whether the vectors @a a and @a b are equal.
 inline bool operator==(const Vector4& a, const Vector4& b)
 {

+ 0 - 18
src/lua/lua_math.cpp

@@ -157,13 +157,6 @@ static int vector3_multiply(lua_State* L)
 	return 1;
 }
 
-static int vector3_divide(lua_State* L)
-{
-	LuaStack stack(L);
-	stack.push_vector3(stack.get_vector3(1) / stack.get_float(2));
-	return 1;
-}
-
 static int vector3_dot(lua_State* L)
 {
 	LuaStack stack(L);
@@ -844,15 +837,6 @@ static int lightuserdata_mul(lua_State* L)
 	return 1;
 }
 
-static int lightuserdata_div(lua_State* L)
-{
-	LuaStack stack(L);
-	const Vector3& a = stack.get_vector3(1);
-	const float b = stack.get_float(2);
-	stack.push_vector3(a / b);
-	return 1;
-}
-
 static int lightuserdata_unm(lua_State* L)
 {
 	LuaStack stack(L);
@@ -913,7 +897,6 @@ void load_math(LuaEnvironment& env)
 	env.load_module_function("Vector3", "add",              vector3_add);
 	env.load_module_function("Vector3", "subtract",         vector3_subtract);
 	env.load_module_function("Vector3", "multiply",         vector3_multiply);
-	env.load_module_function("Vector3", "divide",           vector3_divide);
 	env.load_module_function("Vector3", "dot",              vector3_dot);
 	env.load_module_function("Vector3", "cross",            vector3_cross);
 	env.load_module_function("Vector3", "equal",            vector3_equal);
@@ -1017,7 +1000,6 @@ void load_math(LuaEnvironment& env)
 	env.load_module_function("Lightuserdata_mt", "__add",      lightuserdata_add);
 	env.load_module_function("Lightuserdata_mt", "__sub",      lightuserdata_sub);
 	env.load_module_function("Lightuserdata_mt", "__mul",      lightuserdata_mul);
-	env.load_module_function("Lightuserdata_mt", "__div",      lightuserdata_div);
 	env.load_module_function("Lightuserdata_mt", "__unm",      lightuserdata_unm);
 	env.load_module_function("Lightuserdata_mt", "__index",    lightuserdata_index);
 	env.load_module_function("Lightuserdata_mt", "__newindex", lightuserdata_newindex);

+ 1 - 0
src/renderers/debug_line.cpp

@@ -8,6 +8,7 @@
 #include "color4.h"
 #include "vector3.h"
 #include "matrix4x4.h"
+#include "error.h"
 #include <string.h> // memcpy
 #include <bgfx/bgfx.h>