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 
7 namespace GfxTL
8 {
10  {
11  public:
13  {
14  }
15 
16  void
17  MaskElementSize(unsigned int s)
18  {
19  m_maskElemSize = s;
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>
62  struct DistanceType
63  {
65  };
66 
67  template <class PointAT, class PointBT>
70  Distance(const PointAT& p, const PointBT& v) const
71  {
72  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
90  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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,
108  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
110  abortDist) const
111  {
112  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
130  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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,
157  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
159  abortDist) const
160  {
161  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
188  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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,
214  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
216  abortDist) const
217  {
218  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
270  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
295  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
314  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
358  typedef typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType,
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  {
391  typename DistanceType<typename ScalarTypeDeferer<PointAT>::ScalarType, WidthT>::Type
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  {
442  typedef typename ScalarTypeDeferer<PointBT>::ScalarType ScalarType;
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  {
462  typedef typename ScalarTypeDeferer<PointBT>::ScalarType ScalarType;
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  {
482  typedef typename ScalarTypeDeferer<PointBT>::ScalarType ScalarType;
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  {
502  typedef typename ScalarTypeDeferer<PointBT>::ScalarType ScalarType;
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  {
522  typedef typename ScalarTypeDeferer<BoxPointT>::ScalarType ScalarType;
523  for (unsigned int i = 0; i < VectorKernelT::m_dim; ++i)
524  {
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  {
551  typedef typename ScalarTypeDeferer<BoxPointT>::ScalarType ScalarType;
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>
613  struct MakeL2Norm
614  {
615  template <class VectorKernelT>
616  struct L2NormType : public L2NormWithMask<VectorKernelT, MaskElemSizeT>
617  {
618  };
619  };
620 }; // namespace GfxTL
621 
622 #endif
GfxTL::L2NormWithMask::AssignAsAABoxMaxMaskIgnore
void AssignAsAABoxMaxMaskIgnore(const PointAT &vec, const MaskAT &mask, PointBT *bboxMax) const
Definition: L2Norm.h:500
GfxTL::L2NormWithMask
Definition: L2Norm.h:56
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v) const
Definition: L2Norm.h:88
GfxTL::L2NormWithMask::AssignAsAABoxMinMaskInfinity
void AssignAsAABoxMinMaskInfinity(const PointAT &vec, const MaskAT &mask, PointBT *bboxMin) const
Definition: L2Norm.h:440
GfxTL::FixedMaskElementSize::m_maskElemSize
@ m_maskElemSize
Definition: L2Norm.h:51
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< 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
GfxTL::FixedMaskElementSize::MaskElementSize
const unsigned int MaskElementSize() const
Definition: L2Norm.h:37
GfxTL::L2NormWithMask::AssignAsAABoxMax
void AssignAsAABoxMax(const PointAT &vec, PointBT *bboxMax) const
Definition: L2Norm.h:430
GfxTL::L2NormWithMask::AssignAsAABoxMinMaskIgnore
void AssignAsAABoxMinMaskIgnore(const PointAT &vec, const MaskAT &mask, PointBT *bboxMin) const
Definition: L2Norm.h:460
GfxTL::L2NormWithMask::Distance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type Distance(const PointAT &p, const PointBT &v) const
Definition: L2Norm.h:70
GfxTL::L2NormWithMask::MaskElementSizeType
MaskElemSizeT MaskElementSizeType
Definition: L2Norm.h:59
GfxTL::L2NormWithMask::AssignAsAABoxMin
void AssignAsAABoxMin(const PointAT &vec, PointBT *bboxMin) const
Definition: L2Norm.h:420
GfxTL::max
MatrixXX< C, R, T > max(const MatrixXX< C, R, T > &a, const MatrixXX< C, R, T > &b)
Definition: MatrixXX.h:630
GfxTL::L2NormWithMask::IncrementalBoxSqrDistance
DistScalarT IncrementalBoxSqrDistance(DistScalarT boxSqrDist, DiffScalarT boxDiff, DiffScalarT cutDiff) const
Definition: L2Norm.h:257
GfxTL::FixedMaskElementSize::MaskElementSize
void MaskElementSize(unsigned int s)
Definition: L2Norm.h:43
GfxTL::ScalarTypeDeferer::ScalarType
PointT::value_type ScalarType
Definition: ScalarTypeDeferer.h:15
GfxTL::L2NormWithMask::BoxSqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type BoxSqrDistance(const PointAT &a, const MaskAT &mask, const PointBT &min, const PointBT &max) const
Definition: L2Norm.h:309
GfxTL::L2NormWithMask::RootOfDistance
ScalarT RootOfDistance(ScalarT sqrDistance) const
Definition: L2Norm.h:250
ScalarTypeConversion.h
GfxTL::DynamicMaskElementSize
Definition: L2Norm.h:9
GfxTL::DynamicMaskElementSize::MaskElementSize
const unsigned int MaskElementSize() const
Definition: L2Norm.h:23
GfxTL::L2NormWithMask::DistanceType::Type
ScalarTypeConversion< ScalarAT, ScalarBT >::DifferenceType Type
Definition: L2Norm.h:64
GfxTL::L2NormWithMask::IncludeInAABoxMaskIgnore
void IncludeInAABoxMaskIgnore(const PointT &p, const MaskT &mask, BoxPointT box[2]) const
Definition: L2Norm.h:583
GfxTL::FixedMaskElementSize
Definition: L2Norm.h:33
armarx::ctrlutil::a
double a(double t, double a0, double j)
Definition: CtrlUtil.h:45
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const PointBT &v, const MaskBT &mb) const
Definition: L2Norm.h:186
GfxTL::L2NormWithMask::InitMaximalAABox
void InitMaximalAABox(BoxPointT box[2]) const
Definition: L2Norm.h:520
GfxTL::DynamicMaskElementSize::m_maskElemSize
unsigned int m_maskElemSize
Definition: L2Norm.h:29
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type SqrDistance(const PointAT &p, const MaskAT &ma, const PointBT &v, const MaskBT &mb) const
Definition: L2Norm.h:128
GfxTL::L2NormWithMask::VectorKernelType
VectorKernelT VectorKernelType
Definition: L2Norm.h:58
armarx::PointT
pcl::PointXYZRGBL PointT
Definition: Common.h:30
GfxTL::L2NormWithMask::AssignAsAABoxMaxMaskInfinity
void AssignAsAABoxMaxMaskInfinity(const PointAT &vec, const MaskAT &mask, PointBT *bboxMax) const
Definition: L2Norm.h:480
GfxTL::DynamicMaskElementSize::MaskElementSize
void MaskElementSize(unsigned int s)
Definition: L2Norm.h:17
max
T max(T t1, T t2)
Definition: gdiam.h:51
armarx::aron::similarity::FloatSimilarity::Type
Type
The Type enum.
Definition: FloatSimilarity.h:10
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< 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
GfxTL::Math
Definition: MathHelper.h:11
GfxTL::MakeL2Norm
Definition: L2Norm.h:613
GfxTL::L2NormWithMask::MaxBoxSqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type MaxBoxSqrDistance(const PointAT &a, const PointBT &min, const PointBT &max) const
Definition: L2Norm.h:293
GfxTL::min
MatrixXX< C, R, T > min(const MatrixXX< C, R, T > &a, const MatrixXX< C, R, T > &b)
Definition: MatrixXX.h:616
GfxTL
Definition: AABox.h:9
GfxTL::L2NormWithMask::IncludeInAABoxMaskInfinity
void IncludeInAABoxMaskInfinity(const PointT &p, const MaskT &mask, BoxPointT box[2]) const
Definition: L2Norm.h:549
GfxTL::L2NormWithMask::MaxBoxSqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type MaxBoxSqrDistance(const PointAT &a, const MaskAT &mask, const PointBT &min, const PointBT &max) const
Definition: L2Norm.h:353
GfxTL::L2NormWithMask::AACubeSqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, WidthT >::Type AACubeSqrDistance(const PointAT &a, const PointBT &min, WidthT width) const
Definition: L2Norm.h:389
GfxTL::MakeL2Norm::L2NormType
Definition: L2Norm.h:616
GfxTL::ScalarTypeConversion
Definition: ScalarTypeConversion.h:7
GfxTL::sqrt
VectorXD< D, T > sqrt(const VectorXD< D, T > &a)
Definition: VectorXD.h:704
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
GfxTL::L2NormWithMask::DistanceType
Definition: L2Norm.h:62
GfxTL::L2Norm
Definition: L2Norm.h:608
GfxTL::L2NormWithMask::Distance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type Distance(const PointAT &p, const PointBT &v, const MaskAT &ma, const MaskBT &mb) const
Definition: L2Norm.h:243
min
T min(T t1, T t2)
Definition: gdiam.h:44
GfxTL::L2NormWithMask::BoxSqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< PointBT >::ScalarType >::Type BoxSqrDistance(const PointAT &a, const PointBT &min, const PointBT &max) const
Definition: L2Norm.h:268
GfxTL::DynamicMaskElementSize::DynamicMaskElementSize
DynamicMaskElementSize()
Definition: L2Norm.h:12
MathHelper.h
ScalarTypeDeferer.h
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
GfxTL::L2NormWithMask::SqrDistance
DistanceType< typename ScalarTypeDeferer< PointAT >::ScalarType, typename ScalarTypeDeferer< 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
GfxTL::L2NormWithMask::IncludeInAABox
void IncludeInAABox(const PointT &p, BoxPointT box[2]) const
Definition: L2Norm.h:532