Skip to content

Commit 6c1f253

Browse files
committed
add abs and clamp for Vec2 and Vec3
1 parent 504adf8 commit 6c1f253

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

include/gf2/core/Vec2.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,24 @@ namespace gf {
420420
return almost_equals(a.x, b.x, abs_error, rel_error) && almost_equals(a.y, b.y, abs_error, rel_error);
421421
}
422422

423+
template<typename T>
424+
constexpr Vec2<T> abs(Vec2<T> vec)
425+
{
426+
return { details::abs(vec.x), details::abs(vec.y) };
427+
}
428+
429+
template<typename T>
430+
constexpr Vec2<T> clamp(Vec2<T> vec, Vec2<T> lo, Vec2<T> hi)
431+
{
432+
return { clamp(vec.x, lo.x, hi.x), clamp(vec.y, lo.y, hi.y) };
433+
}
434+
435+
template<typename T>
436+
constexpr Vec2<T> clamp(Vec2<T> vec, T lo, T hi)
437+
{
438+
return { clamp(vec.x, lo, hi), clamp(vec.y, lo, hi) };
439+
}
440+
423441
namespace details {
424442

425443
template<typename Archive, typename Self>

include/gf2/core/Vec3.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,30 @@ namespace gf {
361361
};
362362
}
363363

364+
template<typename T>
365+
constexpr bool almost_equals(Vec3<T> a, Vec3<T> b, T abs_error = std::numeric_limits<T>::epsilon(), T rel_error = std::numeric_limits<T>::epsilon())
366+
{
367+
return almost_equals(a.x, b.x, abs_error, rel_error) && almost_equals(a.y, b.y, abs_error, rel_error) && almost_equals(a.z, b.z, abs_error, rel_error);
368+
}
369+
370+
template<typename T>
371+
constexpr Vec3<T> abs(Vec3<T> vec)
372+
{
373+
return { details::abs(vec.x), details::abs(vec.y), details::abs(vec.z) };
374+
}
375+
376+
template<typename T>
377+
constexpr Vec3<T> clamp(Vec3<T> vec, Vec3<T> lo, Vec3<T> hi)
378+
{
379+
return { clamp(vec.x, lo.x, hi.x), clamp(vec.y, lo.y, hi.y), clamp(vec.z, lo.z, hi.z) };
380+
}
381+
382+
template<typename T>
383+
constexpr Vec3<T> clamp(Vec3<T> vec, T lo, T hi)
384+
{
385+
return { clamp(vec.x, lo, hi), clamp(vec.y, lo, hi), clamp(vec.z, lo, hi) };
386+
}
387+
364388
namespace details {
365389

366390
template<typename Archive, typename Self>

0 commit comments

Comments
 (0)