KdUtils.h
Go to the documentation of this file.
1 // ****************************************************************************
2 // This file is part of the Integrating Vision Toolkit (IVT).
3 //
4 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT)
5 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de).
6 //
7 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT).
8 // All rights reserved.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are met:
12 //
13 // 1. Redistributions of source code must retain the above copyright
14 // notice, this list of conditions and the following disclaimer.
15 //
16 // 2. Redistributions in binary form must reproduce the above copyright
17 // notice, this list of conditions and the following disclaimer in the
18 // documentation and/or other materials provided with the distribution.
19 //
20 // 3. Neither the name of the KIT nor the names of its contributors may be
21 // used to endorse or promote products derived from this software
22 // without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY
25 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY
28 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 // ****************************************************************************
35 // ****************************************************************************
36 // Filename: KdUtils.h
37 // Author: Kai Welke
38 // Date: 14.04.2005
39 // ****************************************************************************
40 
41 
42 #ifndef _KD_UTILS_H_
43 #define _KD_UTILS_H_
44 
45 
46 // ****************************************************************************
47 // Necessary includes
48 // ****************************************************************************
49 
50 #include <new> // for explicitly using correct new/delete operators on VC DSPs
51 #include <math.h>
52 #include "KdStructs.h"
53 
54 
55 
56 // ****************************************************************************
57 // Functions
58 // ****************************************************************************
59 
60 // find smallest enclosing rectangle
61 // used to find initial bounding box for recursion in build process
62 KdBoundingBox CalculateEnclosingBoundingBox(float **ppValues, int nDimension, int nSize)
63 {
64  KdBoundingBox EnclosingBox;
65  EnclosingBox.nDimension = nDimension;
66  EnclosingBox.pfLow = new float[nDimension];
67  EnclosingBox.pfHigh = new float[nDimension];
68 
69  // find boundings for each dimension
70  for (int d = 0; d < nDimension; d++)
71  {
72  // init lower and upper bound
73  float fLow = ppValues[0][d];
74  float fHigh = ppValues[0][d];
75 
76  // find smallest and highest element
77  for (int i = 0; i < nSize; i++)
78  {
79  if (ppValues[i][d] < fLow)
80  {
81  fLow = ppValues[i][d];
82  }
83  else if (ppValues[i][d] > fHigh)
84  {
85  fHigh = ppValues[i][d];
86  }
87  }
88 
89  // store in Box
90  EnclosingBox.pfLow[d] = fLow;
91  EnclosingBox.pfHigh[d] = fHigh;
92  }
93 
94  return EnclosingBox;
95 }
96 
97 
98 // calculate distance form query point to bounding box
99 // used once to initiate recursion for BBF search
100 float GetDistanceFromBox(KdBoundingBox BoundingBox, const float *pValues, int nDimension)
101 {
102  register float fDistance = 0.0f;
103 
104  for (register int d = 0; d < nDimension; d++)
105  {
106  if (pValues[d] < BoundingBox.pfLow[d])
107  {
108  // point is below lower bound so adjust distance
109  const float fTemp = BoundingBox.pfLow[d] - pValues[d];
110  fDistance += powf(fTemp, 2);
111  }
112  else if (pValues[d] > BoundingBox.pfHigh[d])
113  {
114  // point is above upper bound so adjust distance
115  const float fTemp = pValues[d] - BoundingBox.pfHigh[d];
116  fDistance += powf(fTemp, 2);
117  }
118  }
119 
120  return fDistance;
121 }
122 
123 
124 
125 #endif /* _KD_UTILS_H_ */
KdBoundingBox CalculateEnclosingBoundingBox(float **ppValues, int nDimension, int nSize)
Definition: KdUtils.h:62
float GetDistanceFromBox(KdBoundingBox BoundingBox, const float *pValues, int nDimension)
Definition: KdUtils.h:100
float * pfHigh
Definition: KdStructs.h:66
float * pfLow
Definition: KdStructs.h:64
int nDimension
Definition: KdStructs.h:61


asr_ivt
Author(s): Allgeyer Tobias, Hutmacher Robin, Kleinert Daniel, Meißner Pascal, Scholz Jonas, Stöckle Patrick
autogenerated on Mon Dec 2 2019 03:47:28