Browse Source

Merge pull request #459 from Silver1063/master

Added some missing Vector3 functions and Fixed Vector3 slide
Marc 4 years ago
parent
commit
43828ebb39
1 changed files with 10 additions and 1 deletions
  1. 10 1
      include/core/Vector3.hpp

+ 10 - 1
include/core/Vector3.hpp

@@ -165,6 +165,11 @@ struct Vector3 {
 				z + (p_t * (p_b.z - z)));
 				z + (p_t * (p_b.z - z)));
 	}
 	}
 
 
+	inline Vector3 slerp(const Vector3 &p_b, real_t p_t) const {
+		real_t theta = angle_to(p_b);
+		return rotated(cross(p_b).normalized(), theta * p_t);
+	}
+
 	Vector3 cubic_interpolate(const Vector3 &b, const Vector3 &pre_a, const Vector3 &post_b, const real_t t) const;
 	Vector3 cubic_interpolate(const Vector3 &b, const Vector3 &pre_a, const Vector3 &post_b, const real_t t) const;
 
 
 	Vector3 move_toward(const Vector3 &p_to, const real_t p_delta) const {
 	Vector3 move_toward(const Vector3 &p_to, const real_t p_delta) const {
@@ -206,6 +211,10 @@ struct Vector3 {
 		return x * b.x + y * b.y + z * b.z;
 		return x * b.x + y * b.y + z * b.z;
 	}
 	}
 
 
+	inline Vector3 project(const Vector3 &p_b) const {
+		return p_b * (dot(p_b) / p_b.length_squared());
+	}
+
 	inline real_t angle_to(const Vector3 &b) const {
 	inline real_t angle_to(const Vector3 &b) const {
 		return std::atan2(cross(b).length(), dot(b));
 		return std::atan2(cross(b).length(), dot(b));
 	}
 	}
@@ -264,7 +273,7 @@ struct Vector3 {
 	void rotate(const Vector3 &p_axis, real_t p_phi);
 	void rotate(const Vector3 &p_axis, real_t p_phi);
 
 
 	inline Vector3 slide(const Vector3 &by) const {
 	inline Vector3 slide(const Vector3 &by) const {
-		return by - *this * this->dot(by);
+		return *this - by * this->dot(by);
 	}
 	}
 
 
 	void snap(real_t p_val);
 	void snap(real_t p_val);