From eb97ceef955fa1c5e3794c74fc9894fda1ce6f21 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 2 Jun 2026 18:15:13 +0200 Subject: Doing aabb computations --- lib/core/c++/particle/aabb.hpp | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/core/c++/particle/aabb.hpp (limited to 'lib/core/c++/particle/aabb.hpp') diff --git a/lib/core/c++/particle/aabb.hpp b/lib/core/c++/particle/aabb.hpp new file mode 100644 index 0000000..aec95ca --- /dev/null +++ b/lib/core/c++/particle/aabb.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include "particle.hpp" + +namespace kel { +namespace lbm { +template +class particle_aabb final { +}; + +template::type radius> +class particle_aabb > > final { +public: + using Schema = sch::ParticleGroup>; + + using AABB = Struct< + Member"a">, + Member"b"> + >; +public: + static constexpr saw::data get(const saw::data& p_grp, const saw::data>& i, const saw::data>& meta){ + auto& parts = p_grp.template get<"particles">(); + + auto& pi = parts.at(i); + auto& pirb = pi.template get<"rigid_body">(); + auto& pirb_pos = pirb.template get<"position">(); + + saw::data aabb; + auto& a = aabb.template get<"a">(); + auto& b = aabb.template get<"b">(); + + saw::data> rad_d; + rad_d.at({}).set(radius); + + saw::data> lower; + saw::data> upper; + + for(uint64_t i{0u}; i < D; ++i){ + lower.at({{i}}) = pirb_pos.at({{i}}) >= rad_d.at({}) ? (pirb_pos.at({{i}}) - rad_d.at({})) : saw::data{0}; + a.at({i}) = lower.at({{i}}).template cast_to(); + upper.at({{i}}) = pirb_pos.at({{i}}) + rad_d.at({}); + b.at({i}) = (upper.at({{i}})+saw::data{1}).template cast_to() + } + + return aabb; + } +}; +} +} -- cgit v1.2.3