9b563709
David Mayerich
generalized aabb ...
|
1
2
|
#ifndef STIM_AABBN_H
#define STIM_AABBN_H
|
c17d9f44
Jiaming Guo
add aabbn for sti...
|
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#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
|
fcd2eb7c
David Mayerich
added support for...
|
18
19
20
|
CUDA_CALLABLE void init(T* i) {
for (size_t d = 0; d < D; d++)
low[d] = high[d] = i[d];
|
c17d9f44
Jiaming Guo
add aabbn for sti...
|
21
22
|
}
|
fcd2eb7c
David Mayerich
added support for...
|
23
24
25
|
CUDA_CALLABLE aabbn() {}
CUDA_CALLABLE aabbn(T* i) {
init(i);
|
c17d9f44
Jiaming Guo
add aabbn for sti...
|
26
|
}
|
9b563709
David Mayerich
generalized aabb ...
|
27
28
29
30
31
32
|
CUDA_CALLABLE aabbn(T x0, T x1) {
low[0] = x0;
high[0] = x1;
}
|
b7057451
David Mayerich
Fixed compatibili...
|
33
34
35
|
CUDA_CALLABLE aabbn(T x0, T y0, T x1, T y1) {
low[0] = x0;
high[0] = x1;
|
9b563709
David Mayerich
generalized aabb ...
|
36
37
38
39
|
low[1] = y0;
high[1] = y1;
}
|
b7057451
David Mayerich
Fixed compatibili...
|
40
41
42
43
44
|
CUDA_CALLABLE aabbn(T x0, T y0, T z0, T x1, T y1, T z1) {
low[0] = x0;
high[0] = x1;
low[1] = y0;
high[1] = y1;
|
9b563709
David Mayerich
generalized aabb ...
|
45
46
47
|
low[2] = z0;
high[2] = z1;
}
|
fcd2eb7c
David Mayerich
added support for...
|
48
|
|
c17d9f44
Jiaming Guo
add aabbn for sti...
|
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
//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];
}
|
fcd2eb7c
David Mayerich
added support for...
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
CUDA_CALLABLE T length(size_t d) {
return high[d] - low[d];
}
CUDA_CALLABLE aabbn<T, D> operator*(T s) {
aabbn<T, D> newbox;
for (size_t d = 0; d < D; d++) {
T c = (low[d] + high[d]) / 2;
T l = high[d] - low[d];
newbox.low[d] = c - l * s / 2;
newbox.high[d] = c + l * s / 2;
}
return newbox;
}
|
9b563709
David Mayerich
generalized aabb ...
|
84
85
86
87
88
89
90
91
|
//translate the box along dimension d a distance of v
CUDA_CALLABLE void translate(size_t d, T v) {
for (size_t d = 0; d < D; d++) {
low[d] += v;
high[d] += v;
}
}
|
c17d9f44
Jiaming Guo
add aabbn for sti...
|
92
93
94
95
96
97
|
};
}
#endif
|