mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-15 12:39:47 +07:00
vector project function
This commit is contained in:
@@ -1286,6 +1286,9 @@ vec<T, 3> rotate(const vec<T, 3>& v, T angle, const vec<T, 3>& normal);
|
||||
|
||||
template < typename T >
|
||||
vec<T, 4> rotate(const vec<T, 4>& v, T angle, const vec<T, 3>& normal);
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
vec<T, Size> project(const vec<T, Size>& v, const vec<T, Size>& normal);
|
||||
```
|
||||
|
||||
## [License (MIT)](./LICENSE.md)
|
||||
|
||||
@@ -636,4 +636,11 @@ namespace vmath_hpp
|
||||
[[nodiscard]] vec<T, 4> rotate(const vec<T, 4>& v, T angle, const vec<T, 3>& normal) {
|
||||
return v * rotate(angle, normal);
|
||||
}
|
||||
|
||||
// project
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] vec<T, Size> project(const vec<T, Size>& v, const vec<T, Size>& normal) {
|
||||
return dot(v, normal) / length2(normal) * normal;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,4 +221,9 @@ TEST_CASE("vmath/ext") {
|
||||
REQUIRE(rotate(float3(1.5f,0.f,0.f), radians(90.f), float3(0,0,1)) == approx3(0.f,1.5f,0.f));
|
||||
REQUIRE(rotate(float4(1.5f,0.f,0.f,1.f), radians(90.f), float3(0,0,1)) == approx4(0.f,1.5f,0.f,1.f));
|
||||
}
|
||||
|
||||
SUBCASE("vector project") {
|
||||
REQUIRE(project(float2(2.f, 2.f), float2(0.f, 1.f)) == approx2(0.f, 2.f));
|
||||
REQUIRE(project(float3(2.f, 2.f, 2.f), float3(0.f, 0.f, 1.f)) == approx3(0.f, 0.f, 2.f));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user