9 #include "wonton/support/Point.h" 16 Wonton::Point<D> *pmin, Wonton::Point<D> *pmax) {
19 for (
auto pcoord : coords) {
20 for (
int d = 0; d < D; d++) {
21 if (pcoord[d] < (*pmin)[d])
22 (*pmin)[d] = pcoord[d];
23 if (pcoord[d] > (*pmax)[d])
24 (*pmax)[d] = pcoord[d];
31 Wonton::Point<D> min2, Wonton::Point<D> max2,
32 std::vector<double> *xsect_moments) {
34 Wonton::Point<D> intmin, intmax;
36 for (
int d = 0; d < D; ++d) {
39 if (min1[d] > max2[d])
return false;
40 if (min2[d] > max1[d])
return false;
44 val[0] = min1[d]; val[1] = max1[d]; val[2] = min2[d]; val[3] = max2[d];
45 for (
int i = 0; i < 3; i++)
46 for (
int j = i+1; j < 4; j++)
47 if (val[i] > val[j]) {
56 intmin[d] = val[1]; intmax[d] = val[2];
62 for (
int d = 0; d < D; d++)
63 vol *= intmax[d]-intmin[d];
69 if (vol == 0.0)
return false;
73 Wonton::Point<D>
centroid = (intmin+intmax)/2.0;
77 xsect_moments->clear();
78 xsect_moments->push_back(vol);
79 for (
int d = 0; d < D; d++)
80 xsect_moments->push_back(centroid[d]*vol);
88 std::vector<int> *xcells,
91 int num_candidates = candidate_cells_xyz.size();
95 Wonton::Point<D> cmin, cmax;
96 bounding_box<D>(cell_xyz, &cmin, &cmax);
98 for (
int c = 0; c < num_candidates; ++c) {
99 Wonton::Point<D> cmin2, cmax2;
100 bounding_box<D>(candidate_cells_xyz[c], &cmin2, &cmax2);
102 std::vector<double> xsect_moments;
103 if (intersect_boxes<D>(cmin, cmax, cmin2, cmax2, &xsect_moments)) {
104 xwts->push_back(xsect_moments);
105 xcells->push_back(c);
bool intersect_boxes(Wonton::Point< D > min1, Wonton::Point< D > max1, Wonton::Point< D > min2, Wonton::Point< D > max2, std::vector< double > *xsect_moments)
Definition: simple_intersect_for_tests.h:30
Definition: simple_intersect_for_tests.h:12
void intersection_moments(std::vector< Wonton::Point< D >> cell_xyz, std::vector< std::vector< Wonton::Point< D >>> candidate_cells_xyz, std::vector< int > *xcells, std::vector< std::vector< double >> *xwts)
Definition: simple_intersect_for_tests.h:86
std::vector< T > vector
Definition: portage.h:238
Wonton::Point< OP::dim > centroid(const typename OP::points_t &apts)
Definition: operator.h:616
void bounding_box(std::vector< Wonton::Point< D >> coords, Wonton::Point< D > *pmin, Wonton::Point< D > *pmax)
Definition: simple_intersect_for_tests.h:15