20namespace shamtree::details {
22 template<
class Tvec,
class Tscal>
23 inline static bool mac_std_opti(
29 Tvec delta_ab = r_a - r_b;
31 Tscal delta_ab_sq = sham::dot(delta_ab, delta_ab);
33 if (delta_ab_sq == 0) {
37 Tscal s_a_max = sham::max_component(s_a);
38 Tscal s_b_max = sham::max_component(s_b);
40 Tscal sum_s = s_a_max + s_b_max;
42 Tscal theta_sq = sum_s * sum_s / delta_ab_sq;
44 return theta_sq < theta_crit * theta_crit;
47 template<
class Tvec,
class Tscal>
53 Tvec delta_ab = r_a - r_b;
55 Tscal delta_ab_sq = sham::dot(delta_ab, delta_ab);
57 if (delta_ab_sq == 0) {
61 Tscal s_a_sq = sham::dot(s_a, s_a);
62 Tscal s_b_sq = sham::dot(s_b, s_b);
64 Tscal theta_sq = (sycl::sqrt(s_a_sq) + sycl::sqrt(s_b_sq)) / sycl::sqrt(delta_ab_sq);
66 return theta_sq < theta_crit;
69 template<
class Tvec,
class Tscal>
70 inline static bool mac_quadratic(
76 Tvec delta_ab = r_a - r_b;
78 Tscal delta_ab_sq = sham::dot(delta_ab, delta_ab);
80 if (delta_ab_sq == 0) {
84 Tscal s_a_sq = sham::dot(s_a, s_a);
85 Tscal s_b_sq = sham::dot(s_b, s_b);
87 Tscal theta_sq = (s_a_sq + s_b_sq) / delta_ab_sq;
89 return theta_sq < theta_crit * theta_crit;
92 template<
class Tvec,
class Tscal>
94 return mac_std_opti(a, b, theta_crit);
Axis-Aligned bounding box.
T lower
Lower bound of the AABB.
T upper
Upper bound of the AABB.