aabbn.h
1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef STIM_AABB3_H
#define STIM_AABB3_H
#include <vector>
#include <stim/cuda/cudatools/callable.h>
namespace stim{
/// Structure for a 3D axis aligned bounding box
template<typename T, size_t D>
struct aabbn{
//protected:
T low[D]; //top left corner position
T high[D]; //dimensions along x and y and z
//public:
CUDA_CALLABLE aabbn(){ //initialize an axis aligned bounding box of size 0 at the given position
for(size_t d = 0; d < D; d++)
low[d] = high[d] = 0;
}
CUDA_CALLABLE void init(T* init){
for(size_t d = 0; d < D; d++)
low[d] = high[d] = init[d];
}
//insert a point into the bounding box, growing the box appropriately
CUDA_CALLABLE void insert(T* p){
for(size_t d = 0; d < D; d++){
if(p[d] < low[d]) low[d] = p[d];
if(p[d] > high[d]) high[d] = p[d];
}
}
//trim the bounding box so that the lower bounds are b(x, y, z, ...)
CUDA_CALLABLE void trim_low(T* b){
for(size_t d = 0; d < D; d++)
if(low[d] < b[d]) low[d] = b[d];
}
CUDA_CALLABLE void trim_high(T* b){
for(size_t d = 0; d < D; d++)
if(low[d] > b[d]) low[d] = b[d];
}
};
}
#endif