Go to the documentation of this file.
27 #ifndef __MINMAX_DEFINED
28 #define __MINMAX_DEFINED
46 return t1 > t2 ? t2 : t1;
53 return t1 > t2 ? t1 : t2;
70 return sqrt(pnt[0] * pnt[0] + pnt[1] * pnt[1] + pnt[2] * pnt[2]);
99 dst[0] = dst[1] = dst[2] = 0;
105 printf(
"(%g, %g, %g)\n", pnt[0], pnt[1], pnt[2]);
111 return a[0] * b[0] +
a[1] * b[1] +
a[2] * b[2];
117 out[0] =
a[1] * b[2] -
a[2] * b[1];
118 out[1] = -(
a[0] * b[2] -
a[2] * b[0]);
119 out[2] =
a[0] * b[1] -
a[1] * b[0];
128 return sqrt(valx * valx + valy * valy);
138 return sqrt(valx * valx + valy * valy + valz * valz);
150 len =
sqrt(valx * valx + valy * valy + valz * valz);
152 proj_len = dir[0] * valx + dir[1] * valy + dir[2] * valz;
154 return sqrt(len * len - proj_len * proj_len);
179 return ((p[0] ==
q[0]) && (p[1] ==
q[1]) && (p[2] ==
q[2]));
185 dest[0] += coef * vec[0];
186 dest[1] += coef * vec[1];
187 dest[2] += coef * vec[2];
300 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
302 min_coords[ind] =
min(
a.min_coords[ind], b.min_coords[ind]);
303 max_coords[ind] =
max(
a.max_coords[ind], b.max_coords[ind]);
313 printf(
"__________________________________________\n");
315 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
317 printf(
"%d: [%g...%g]\n", ind, min_coords[ind], max_coords[ind]);
318 diff = max_coords[ind] - min_coords[ind];
322 printf(
"volume = %g\n", prod);
323 printf(
"\\__________________________________________\n");
329 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
331 out[ind] = (min_coords[ind] + max_coords[ind]) / 2.0;
342 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
354 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
356 min_coords[ind] = 1e20;
357 max_coords[ind] = -1e20;
375 return min_coords[coord];
381 return max_coords[coord];
388 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
390 if (pnt[ind] < min_coords[ind])
392 min_coords[ind] = pnt[ind];
395 if (pnt[ind] > max_coords[ind])
397 max_coords[ind] = pnt[ind];
405 return max_coords[dim] - min_coords[dim];
414 for (
int ind = 1; ind <
GDIAM_DIM; ind++)
437 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
459 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
463 prod = coord * dir[ind];
464 val = coord * coord - prod * prod;
481 return min_coords[dim];
487 return max_coords[dim];
510 for (
int i = 0; i < 3; i++)
512 dir_1[i] = other.dir_1[i];
513 dir_2[i] = other.dir_2[i];
514 dir_3[i] = other.dir_3[i];
525 f_init = other.f_init;
531 for (
int i = 0; i < 3; i++)
533 dir_1[i] = other.dir_1[i];
534 dir_2[i] = other.dir_2[i];
535 dir_3[i] = other.dir_3[i];
546 f_init = other.f_init;
560 return len1 * len2 * len3;
573 memcpy(pnt_tmp, dir_1,
sizeof(dir_1));
575 memcpy(dir_1, dir_3,
sizeof(dir_3));
577 memcpy(dir_3, pnt_tmp,
sizeof(dir_3));
618 for (
int ind = 0; ind <
GDIAM_DIM; ind++)
619 out[ind] = a_coef * dir_1[ind] + b_coef * dir_2[ind] + c_coef * dir_3[ind];
653 printf(
"-----------------------------------------------\n");
662 printf(
"volume: %g\n",
volume());
663 printf(
"Directions:\n");
667 printf(
"prods: %g, %g, %g\n",
672 printf(
"--------------------------------------------------\n");
715 printf(
"should be all close to zero: %g, %g, %g\n",
gdiam_real volume() const
void pnt_init(gdiam_point pnt, gdiam_real x, gdiam_real y, gdiam_real z)
void pnt_zero(gdiam_point dst)
void init(const gdiam_point _p, const gdiam_point _q)
gdiam_real get_diam_proj(gdiam_point dir) const
gdiam_real pnt_distance_2d(gdiam_point_2d p, gdiam_point_2d q)
gdiam_real get_min_coord(int dim) const
void bound(const gdiam_point pnt)
gdiam_bbox gdiam_approx_mvbb_grid(gdiam_point *start, int size, int grid_size)
gdiam_bbox gdiam_approx_const_mvbb(gdiam_point *start, int size, gdiam_real eps, GBBox *p_ap_bbox)
void init(const gdiam_point _dir_1, const gdiam_point _dir_2, const gdiam_point _dir_3)
gdiam_real getLongestEdge() const
gdiam_real pnt_length(const gdiam_point pnt)
void gdiam_generate_orthonormal_base(gdiam_point in, gdiam_point out1, gdiam_point out2)
void center(gdiam_point out) const
const gdiam_real & max_coord(int coord) const
void update_diam(const gdiam_point _p, const gdiam_point _q)
void pnt_copy(gdiam_point_t dest, gdiam_point_t src)
void pnt_dump(gdiam_point_cnt pnt)
gdiam_real length_dim(int dim) const
void combine(gdiam_point out, double a_coef, double b_coef, double c_coef)
gdiam_bbox(const gdiam_bbox &other)
GPointPair gdiam_approx_diam(gdiam_point *start, int size, gdiam_real eps)
GPointPair gdiam_approx_diam_pair(gdiam_real *start, int size, gdiam_real eps)
void bound(const gdiam_point pnt)
double a(double t, double a0, double j)
gdiam_real get_diam() const
gdiam_real * gdiam_point_2d
void init(const GBBox &a, const GBBox &b)
gdiam_real pnt_distance(gdiam_point p, gdiam_point q)
gdiam_real get_max_coord(int dim) const
void pnt_cross_prod(const gdiam_point a, const gdiam_point b, const gdiam_point out)
gdiam_point get_dir(int ind)
void update_diam_simple(const gdiam_point _p, const gdiam_point _q)
gdiam_bbox gdiam_approx_mvbb(gdiam_point *start, int size, gdiam_real eps)
const gdiam_real & min_coord(int coord) const
gdiam_real pnt_dot_prod(gdiam_point_cnt a, gdiam_point_cnt b)
int getLongestDim() const
void pnt_scale_and_add(gdiam_point dest, gdiam_real coef, gdiam_point_cnt vec)
const gdiam_real * gdiam_point_cnt
void get_normalized_coordinates(gdiam_point in, gdiam_point out)
void set_third_dim_longest()
VectorXD< D, T > sqrt(const VectorXD< D, T > &a)
GPointPair gdiam_approx_diam_pair_UDM(gdiam_real *start, int size, gdiam_real eps)
gdiam_real gdiam_point_2d_t[2]
bool pnt_isEqual(const gdiam_point p, const gdiam_point q)
void init(const gdiam_point _p, const gdiam_point _q, const gdiam_point proj)
void gdiam_exchange(T &a, T &b)
gdiam_real gdiam_point_t[GDIAM_DIM]
void update_diam(const gdiam_point _p, const gdiam_point _q, const gdiam_point dir)
void dump_vertex(double sel1, double sel2, double sel3) const
gdiam_real volume() const
gdiam_point * gdiam_convert(gdiam_real *start, int size)
void pnt_normalize(gdiam_point pnt)
gdiam_bbox & operator=(const gdiam_bbox &other)
gdiam_bbox gdiam_approx_mvbb_grid_sample(gdiam_point *start, int size, int grid_size, int sample_size)
void init(const gdiam_point pnt)
void update_diam(GPointPair &pp)
void update_diam_simple(const gdiam_point _p, const gdiam_point _q, const gdiam_point dir)
void pnt_init_normalize(gdiam_point pnt, gdiam_real x, gdiam_real y, gdiam_real z)
void init(const GBBox &bb)