L2Norm.h
Go to the documentation of this file.
1#ifndef GfxTL__L2NORM_HEADER__
2#define GfxTL__L2NORM_HEADER__
3#include <GfxTL/MathHelper.h>
6
7namespace GfxTL
8{
10 {
11 public:
15
16 void
17 MaskElementSize(unsigned int s)
18 {
20 }
21
22 const unsigned int
24 {
25 return m_maskElemSize;
26 }
27
28 protected:
29 unsigned int m_maskElemSize;
30 };
31
32 template <unsigned int SizeT>
34 {
35 public:
36 const unsigned int
38 {
39 return m_maskElemSize;
40 }
41
42 void
43 MaskElementSize(unsigned int s)
44 {
45 assert(s == SizeT);
46 }
47
48 protected:
49 enum
50 {
52 };
53 };
54
55 template <class VectorKernelT, class MaskElemSizeT = FixedMaskElementSize<1>>
56 struct L2NormWithMask : public VectorKernelT, public MaskElemSizeT
57 {
58 typedef VectorKernelT VectorKernelType;
59 typedef MaskElemSizeT MaskElementSizeType;
60
61 template <class ScalarAT, class ScalarBT>
66
67 template <class PointAT, class PointBT>
70 Distance(const PointAT& p, const PointBT& v) const
71 {
74 DistType;
75 DistType d = p[0] - v[0], di;
76 d *= d;
77 for (unsigned int i = 1; i < VectorKernelT::m_dim; ++i)
78 {
79 di = p[i] - v[i];
80 d += di * di;
81 }
82 return std::sqrt(d);
83 }
84
85 template <class PointAT, class PointBT>
86 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
88 SqrDistance(const PointAT& p, const PointBT& v) const
89 {
92 DistType;
93 DistType d = p[0] - v[0], di;
94 d *= d;
95 for (unsigned int i = 1; i < VectorKernelT::m_dim; ++i)
96 {
97 di = p[i] - v[i];
98 d += di * di;
99 }
100 return d;
101 }
102
103 template <class PointAT, class PointBT>
104 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
106 SqrDistance(const PointAT& p,
107 const PointBT& v,
110 abortDist) const
111 {
114 DistType;
115 DistType d = p[0] - v[0], di;
116 d *= d;
117 for (unsigned int i = 1; i < VectorKernelT::m_dim && d < abortDist; ++i)
118 {
119 di = p[i] - v[i];
120 d += di * di;
121 }
122 return d;
123 }
124
125 template <class PointAT, class PointBT, class MaskAT, class MaskBT>
126 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
128 SqrDistance(const PointAT& p, const MaskAT& ma, const PointBT& v, const MaskBT& mb) const
129 {
132 DistType;
133 DistType d = 0, dj;
134 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
135 {
136 if (!(ma[i] && mb[i]))
137 {
138 continue;
139 }
140 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
141 {
142 dj = p[i * MaskElemSizeT::m_maskElemSize + j] -
143 v[i * MaskElemSizeT::m_maskElemSize + j];
144 d += dj * dj;
145 }
146 }
147 return d;
148 }
149
150 template <class PointAT, class PointBT, class MaskAT, class MaskBT>
151 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
153 SqrDistance(const PointAT& p,
154 const MaskAT& ma,
155 const PointBT& v,
156 const MaskBT& mb,
159 abortDist) const
160 {
163 DistType;
164 DistType d = 0, dj;
165 for (unsigned int i = 0;
166 i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize && d < abortDist;
167 ++i)
168 {
169 if (!(ma[i] && mb[i]))
170 {
171 continue;
172 }
173 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize && d < abortDist; ++j)
174 {
175 dj = p[i * MaskElemSizeT::m_maskElemSize + j] -
176 v[i * MaskElemSizeT::m_maskElemSize + j];
177 d += dj * dj;
178 }
179 }
180 return d;
181 }
182
183 template <class PointAT, class PointBT, class MaskBT>
184 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
186 SqrDistance(const PointAT& p, const PointBT& v, const MaskBT& mb) const
187 {
190 DistType;
191 DistType d = 0, dj;
192 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
193 {
194 if (!mb[i])
195 {
196 continue;
197 }
198 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
199 {
200 dj = p[i * MaskElemSizeT::m_maskElemSize + j] -
201 v[i * MaskElemSizeT::m_maskElemSize + j];
202 d += dj * dj;
203 }
204 }
205 return d;
206 }
207
208 template <class PointAT, class PointBT, class MaskBT>
209 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
211 SqrDistance(const PointAT& p,
212 const PointBT& v,
213 const MaskBT& mb,
216 abortDist) const
217 {
220 DistType;
221 DistType d = 0, dj;
222 for (unsigned int i = 0;
223 i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize && d < abortDist;
224 ++i)
225 {
226 if (!mb[i])
227 {
228 continue;
229 }
230 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize && d < abortDist; ++j)
231 {
232 dj = p[i * MaskElemSizeT::m_maskElemSize + j] -
233 v[i * MaskElemSizeT::m_maskElemSize + j];
234 d += dj * dj;
235 }
236 }
237 return d;
238 }
239
240 template <class PointAT, class PointBT, class MaskAT, class MaskBT>
241 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
243 Distance(const PointAT& p, const PointBT& v, const MaskAT& ma, const MaskBT& mb) const
244 {
245 return std::sqrt(SqrDistance(p, v, ma, mb));
246 }
247
248 template <class ScalarT>
249 ScalarT
250 RootOfDistance(ScalarT sqrDistance) const
251 {
252 return std::sqrt(sqrDistance);
253 }
254
255 template <class DistScalarT, class DiffScalarT>
256 DistScalarT
257 IncrementalBoxSqrDistance(DistScalarT boxSqrDist,
258 DiffScalarT boxDiff,
259 DiffScalarT cutDiff) const
260 {
261 return boxSqrDist - ((DistScalarT)boxDiff * (DistScalarT)boxDiff) +
262 ((DistScalarT)cutDiff * (DistScalarT)cutDiff);
263 }
264
265 template <class PointAT, class PointBT>
266 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
268 BoxSqrDistance(const PointAT& a, const PointBT& min, const PointBT& max) const
269 {
271 typename ScalarTypeDeferer<PointBT>::ScalarType>::Type sqrDist =
272 0,
273 t;
274 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
275 {
276 if (a[i] < min[i])
277 {
278 t = min[i] - a[i];
279 sqrDist += t * t;
280 }
281 else if (a[i] > max[i])
282 {
283 t = a[i] - max[i];
284 sqrDist += t * t;
285 }
286 }
287 return sqrDist;
288 }
289
290 template <class PointAT, class PointBT>
291 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
293 MaxBoxSqrDistance(const PointAT& a, const PointBT& min, const PointBT& max) const
294 {
297 DistType;
298 DistType sqrDist = 0, t;
299 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
300 sqrDist += (t = std::max(Math<DistType>::Abs(min[i] - a[i]),
301 Math<DistType>::Abs(max[i] - a[i]))) *
302 t;
303 return sqrDist;
304 }
305
306 template <class PointAT, class MaskAT, class PointBT>
307 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
309 BoxSqrDistance(const PointAT& a,
310 const MaskAT& mask,
311 const PointBT& min,
312 const PointBT& max) const
313 {
315 typename ScalarTypeDeferer<PointBT>::ScalarType>::Type sqrDist =
316 0,
317 t;
318 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
319 {
320 if (!mask[i])
321 {
322 continue;
323 }
324 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
325 {
326 if (min[i * MaskElemSizeT::m_maskElemSize + j] >
327 max[i * MaskElemSizeT::m_maskElemSize + j])
328 {
329 continue;
330 }
331 if (a[i * MaskElemSizeT::m_maskElemSize + j] <
332 min[i * MaskElemSizeT::m_maskElemSize + j])
333 {
334 t = min[i * MaskElemSizeT::m_maskElemSize + j] -
335 a[i * MaskElemSizeT::m_maskElemSize + j];
336 sqrDist += t * t;
337 }
338 else if (a[i * MaskElemSizeT::m_maskElemSize + j] >
339 max[i * MaskElemSizeT::m_maskElemSize + j])
340 {
341 t = a[i * MaskElemSizeT::m_maskElemSize + j] -
342 max[i * MaskElemSizeT::m_maskElemSize + j];
343 sqrDist += t * t;
344 }
345 }
346 }
347 return sqrDist;
348 }
349
350 template <class PointAT, class MaskAT, class PointBT>
351 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
353 MaxBoxSqrDistance(const PointAT& a,
354 const MaskAT& mask,
355 const PointBT& min,
356 const PointBT& max) const
357 {
360 DistType;
361 DistType sqrDist = 0, t;
362 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
363 {
364 if (!mask[i])
365 {
366 continue;
367 }
368 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
369 {
370 if (min[i * MaskElemSizeT::m_maskElemSize + j] >
371 max[i * MaskElemSizeT::m_maskElemSize + j])
372 {
373 continue;
374 }
375 sqrDist +=
376 (t = std::max(
377 Math<DistType>::Abs(min[i * MaskElemSizeT::m_maskElemSize + j] -
378 a[i * MaskElemSizeT::m_maskElemSize + j]),
379 Math<DistType>::Abs(max[i * MaskElemSizeT::m_maskElemSize + j] -
380 a[i * MaskElemSizeT::m_maskElemSize + j]))) *
381 t;
382 }
383 }
384 return sqrDist;
385 }
386
387 template <class PointAT, class PointBT, class WidthT>
388 typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType, WidthT>::Type
389 AACubeSqrDistance(const PointAT& a, const PointBT& min, WidthT width) const
390 {
392 sqrDist = 0,
393 t;
394 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
395 {
396 if (min[i] > a[i])
397 {
398 t = min[i] - a[i];
399 sqrDist += t * t;
400 }
401 else if (a[i] > min[i] + width)
402 {
403 t = a[i] - (min[i] + width);
404 sqrDist += t * t;
405 }
406 //t = min[i] - a[i];
407 //if(t > 0)
408 // sqrDist += t * t;
409 //else if(t < -width)
410 //{
411 // t += width;
412 // sqrDist += t * t;
413 //}
414 }
415 return sqrDist;
416 }
417
418 template <class PointAT, class PointBT>
419 void
420 AssignAsAABoxMin(const PointAT& vec, PointBT* bboxMin) const
421 {
422 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
423 {
424 (*bboxMin)[i] = vec[i];
425 }
426 }
427
428 template <class PointAT, class PointBT>
429 void
430 AssignAsAABoxMax(const PointAT& vec, PointBT* bboxMax) const
431 {
432 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
433 {
434 (*bboxMax)[i] = vec[i];
435 }
436 }
437
438 template <class PointAT, class MaskAT, class PointBT>
439 void
440 AssignAsAABoxMinMaskInfinity(const PointAT& vec, const MaskAT& mask, PointBT* bboxMin) const
441 {
443 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
444 if (mask[i])
445 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
446 {
447 (*bboxMin)[i * MaskElemSizeT::m_maskElemSize + j] =
448 vec[i * MaskElemSizeT::m_maskElemSize + j];
449 }
450 else
451 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
452 {
453 (*bboxMin)[i * MaskElemSizeT::m_maskElemSize + j] =
454 -std::numeric_limits<ScalarType>::infinity();
455 }
456 }
457
458 template <class PointAT, class MaskAT, class PointBT>
459 void
460 AssignAsAABoxMinMaskIgnore(const PointAT& vec, const MaskAT& mask, PointBT* bboxMin) const
461 {
463 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
464 if (mask[i])
465 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
466 {
467 (*bboxMin)[i * MaskElemSizeT::m_maskElemSize + j] =
468 vec[i * MaskElemSizeT::m_maskElemSize + j];
469 }
470 else
471 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
472 {
473 (*bboxMin)[i * MaskElemSizeT::m_maskElemSize + j] =
474 std::numeric_limits<ScalarType>::infinity();
475 }
476 }
477
478 template <class PointAT, class MaskAT, class PointBT>
479 void
480 AssignAsAABoxMaxMaskInfinity(const PointAT& vec, const MaskAT& mask, PointBT* bboxMax) const
481 {
483 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
484 if (mask[i])
485 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
486 {
487 (*bboxMax)[i * MaskElemSizeT::m_maskElemSize + j] =
488 vec[i * MaskElemSizeT::m_maskElemSize + j];
489 }
490 else
491 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
492 {
493 (*bboxMax)[i * MaskElemSizeT::m_maskElemSize + j] =
494 std::numeric_limits<ScalarType>::infinity();
495 }
496 }
497
498 template <class PointAT, class MaskAT, class PointBT>
499 void
500 AssignAsAABoxMaxMaskIgnore(const PointAT& vec, const MaskAT& mask, PointBT* bboxMax) const
501 {
503 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
504 if (mask[i])
505 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
506 {
507 (*bboxMax)[i * MaskElemSizeT::m_maskElemSize + j] =
508 vec[i * MaskElemSizeT::m_maskElemSize + j];
509 }
510 else
511 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
512 {
513 (*bboxMax)[i * MaskElemSizeT::m_maskElemSize + j] =
514 -std::numeric_limits<ScalarType>::infinity();
515 }
516 }
517
518 template <class BoxPointT>
519 void
520 InitMaximalAABox(BoxPointT box[2]) const
521 {
523 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
524 {
525 box[0][i] = std::numeric_limits<ScalarType>::min();
526 box[1][i] = std::numeric_limits<ScalarType>::max();
527 }
528 }
529
530 template <class PointT, class BoxPointT>
531 void
532 IncludeInAABox(const PointT& p, BoxPointT box[2]) const
533 {
534 for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
535 {
536 if (box[0][i] > p[i])
537 {
538 box[0][i] = p[i];
539 }
540 else if (box[1][i] < p[i])
541 {
542 box[1][i] = p[i];
543 }
544 }
545 }
546
547 template <class PointT, class MaskT, class BoxPointT>
548 void
549 IncludeInAABoxMaskInfinity(const PointT& p, const MaskT& mask, BoxPointT box[2]) const
550 {
552 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
553 {
554 if (mask[i])
555 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
556 {
557 if (box[0][i * MaskElemSizeT::m_maskElemSize + j] >
558 p[i * MaskElemSizeT::m_maskElemSize + j])
559 {
560 box[0][i * MaskElemSizeT::m_maskElemSize + j] =
561 p[i * MaskElemSizeT::m_maskElemSize + j];
562 }
563 else if (box[1][i * MaskElemSizeT::m_maskElemSize + j] <
564 p[i * MaskElemSizeT::m_maskElemSize + j])
565 {
566 box[1][i * MaskElemSizeT::m_maskElemSize + j] =
567 p[i * MaskElemSizeT::m_maskElemSize + j];
568 }
569 }
570 else
571 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
572 {
573 box[0][i * MaskElemSizeT::m_maskElemSize + j] =
574 -std::numeric_limits<ScalarType>::infinity();
575 box[1][i * MaskElemSizeT::m_maskElemSize + j] =
576 std::numeric_limits<ScalarType>::infinity();
577 }
578 }
579 }
580
581 template <class PointT, class MaskT, class BoxPointT>
582 void
583 IncludeInAABoxMaskIgnore(const PointT& p, const MaskT& mask, BoxPointT box[2]) const
584 {
585 // typedef typename ScalarTypeDeferer< BoxPointT >::ScalarType
586 // ScalarType;
587 for (unsigned int i = 0; i < VectorKernelT::m_dim / MaskElemSizeT::m_maskElemSize; ++i)
588 if (mask[i])
589 for (unsigned int j = 0; j < MaskElemSizeT::m_maskElemSize; ++j)
590 {
591 if (box[0][i * MaskElemSizeT::m_maskElemSize + j] >
592 p[i * MaskElemSizeT::m_maskElemSize + j])
593 {
594 box[0][i * MaskElemSizeT::m_maskElemSize + j] =
595 p[i * MaskElemSizeT::m_maskElemSize + j];
596 }
597 else if (box[1][i * MaskElemSizeT::m_maskElemSize + j] <
598 p[i * MaskElemSizeT::m_maskElemSize + j])
599 {
600 box[1][i * MaskElemSizeT::m_maskElemSize + j] =
601 p[i * MaskElemSizeT::m_maskElemSize + j];
602 }
603 }
604 }
605 };
606
607 template <class VectorKernelT>
608 struct L2Norm : public L2NormWithMask<VectorKernelT, FixedMaskElementSize<1>>
609 {
610 };
611
612 template <class MaskElemSizeT>
614 {
615 template <class VectorKernelT>
616 struct L2NormType : public L2NormWithMask<VectorKernelT, MaskElemSizeT>
617 {
618 };
619 };
620}; // namespace GfxTL
621
622#endif
static ScalarT Abs(ScalarT s)
Definition MathHelper.h:15
Definition AABox.h:10
MatrixXX< C, R, T > min(const MatrixXX< C, R, T > &a, const MatrixXX< C, R, T > &b)
Definition MatrixXX.h:616
MatrixXX< C, R, T > max(const MatrixXX< C, R, T > &a, const MatrixXX< C, R, T > &b)
Definition MatrixXX.h:630
void MaskElementSize(unsigned int s)
Definition L2Norm.h:17
unsigned int m_maskElemSize
Definition L2Norm.h:29
const unsigned int MaskElementSize() const
Definition L2Norm.h:23
void MaskElementSize(unsigned int s)
Definition L2Norm.h:43
const unsigned int MaskElementSize() const
Definition L2Norm.h:37
ScalarTypeConversion< ScalarAT, ScalarBT >::DifferenceType Type
Definition L2Norm.h:64
void AssignAsAABoxMinMaskIgnore(const PointAT &vec, const MaskAT &mask, PointBT *bboxMin) const
Definition L2Norm.h:460
DistScalarT IncrementalBoxSqrDistance(DistScalarT boxSqrDist, DiffScalarT boxDiff, DiffScalarT cutDiff) const
Definition L2Norm.h:257
void IncludeInAABoxMaskInfinity(const PointT &p, const MaskT &mask, BoxPointT box[2]) const
Definition L2Norm.h:549
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v, const MaskBT &mb) const
Definition L2Norm.h:186
void InitMaximalAABox(BoxPointT box[2]) const
Definition L2Norm.h:520
void AssignAsAABoxMaxMaskIgnore(const PointAT &vec, const MaskAT &mask, PointBT *bboxMax) const
Definition L2Norm.h:500
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type Distance(const PointAT &p, const PointBT &v, const MaskAT &ma, const MaskBT &mb) const
Definition L2Norm.h:243
void AssignAsAABoxMin(const PointAT &vec, PointBT *bboxMin) const
Definition L2Norm.h:420
void IncludeInAABox(const PointT &p, BoxPointT box[2]) const
Definition L2Norm.h:532
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type BoxSqrDistance(const PointAT &a, const MaskAT &mask, const PointBT &min, const PointBT &max) const
Definition L2Norm.h:309
void AssignAsAABoxMaxMaskInfinity(const PointAT &vec, const MaskAT &mask, PointBT *bboxMax) const
Definition L2Norm.h:480
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type Distance(const PointAT &p, const PointBT &v) const
Definition L2Norm.h:70
void AssignAsAABoxMax(const PointAT &vec, PointBT *bboxMax) const
Definition L2Norm.h:430
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v, const MaskBT &mb, typename DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type abortDist) const
Definition L2Norm.h:211
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const MaskAT &ma, const PointBT &v, const MaskBT &mb) const
Definition L2Norm.h:128
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type MaxBoxSqrDistance(const PointAT &a, const MaskAT &mask, const PointBT &min, const PointBT &max) const
Definition L2Norm.h:353
void AssignAsAABoxMinMaskInfinity(const PointAT &vec, const MaskAT &mask, PointBT *bboxMin) const
Definition L2Norm.h:440
ScalarT RootOfDistance(ScalarT sqrDistance) const
Definition L2Norm.h:250
VectorKernelT VectorKernelType
Definition L2Norm.h:58
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const MaskAT &ma, const PointBT &v, const MaskBT &mb, typename DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type abortDist) const
Definition L2Norm.h:153
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v) const
Definition L2Norm.h:88
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type MaxBoxSqrDistance(const PointAT &a, const PointBT &min, const PointBT &max) const
Definition L2Norm.h:293
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type BoxSqrDistance(const PointAT &a, const PointBT &min, const PointBT &max) const
Definition L2Norm.h:268
MaskElemSizeT MaskElementSizeType
Definition L2Norm.h:59
void IncludeInAABoxMaskIgnore(const PointT &p, const MaskT &mask, BoxPointT box[2]) const
Definition L2Norm.h:583
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, WidthT >::Type AACubeSqrDistance(const PointAT &a, const PointBT &min, WidthT width) const
Definition L2Norm.h:389
DistanceType< typenameScalarTypeDeferer< PointAT >::ScalarType, typenameScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v, typename DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type abortDist) const
Definition L2Norm.h:106
PointT::value_type ScalarType