35 const float nearestX = std::clamp(
cx,
minX,
maxX);
36 const float nearestY = std::clamp(
cy,
minY,
maxY);
37 const float dx =
cx - nearestX;
38 const float dy =
cy - nearestY;
39 return dx * dx + dy * dy <= radius * radius;
75 const float nearestX = std::clamp(
cx,
minX,
maxX);
76 const float nearestY = std::clamp(
cy,
minY,
maxY);
77 const float nearestZ = std::clamp(cz,
minZ,
maxZ);
78 const float dx =
cx - nearestX;
79 const float dy =
cy - nearestY;
80 const float dz = cz - nearestZ;
81 return dx * dx + dy * dy + dz * dz <= radius * radius;
86 if (minX > maxX) std::swap(minX, maxX);
87 if (minY > maxY) std::swap(minY, maxY);
88 return AABB2{minX, minY, maxX, maxY};
91inline AABB3 makeAABB3(
float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ) {
92 if (minX > maxX) std::swap(minX, maxX);
93 if (minY > maxY) std::swap(minY, maxY);
94 if (minZ > maxZ) std::swap(minZ, maxZ);
95 return AABB3{minX, minY, minZ, maxX, maxY, maxZ};
100 return (uint64_t(uint32_t(
cx)) << 32) | uint64_t(uint32_t(
cy));
105 const uint64_t
x = uint64_t(uint32_t(
cx) & 0x1fffffu);
106 const uint64_t
y = uint64_t(uint32_t(
cy) & 0x1fffffu);
107 const uint64_t
z = uint64_t(uint32_t(cz) & 0x1fffffu);
108 return (
x << 42) | (
y << 21) |
z;
AABB2 makeAABB2(float minX, float minY, float maxX, float maxY)
AABB3 makeAABB3(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
uint64_t cellKey3(int cx, int cy, int cz)
uint64_t cellKey2(int cx, int cy)
Integer cell key for spatial hashing (stable across platforms for reasonable ranges).
bool containsPoint(float x, float y) const
bool containsAABB(const AABB2 &o) const
bool intersectsAABB(const AABB2 &o) const
bool intersectsCircle(float cx, float cy, float radius) const
bool containsPoint(float x, float y, float z) const
bool intersectsAABB(const AABB3 &o) const
bool containsAABB(const AABB3 &o) const
bool intersectsSphere(float cx, float cy, float cz, float radius) const