1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* $Id: db_utilities_geometry.h,v 1.3 2011/06/17 14:03:31 mbansal Exp $ */ 18 19 #ifndef DB_UTILITIES_GEOMETRY_H 20 #define DB_UTILITIES_GEOMETRY_H 21 22 #include "db_utilities.h" 23 24 25 26 /***************************************************************** 27 * Lean and mean begins here * 28 *****************************************************************/ 29 /*! Get the inhomogenous 2D-point centroid of nr_point inhomogenous 30 points in X*/ 31 inline void db_PointCentroid2D(double c[2],const double *X,int nr_points) 32 { 33 int i; 34 double cx,cy,m; 35 36 cx=0;cy=0; 37 for(i=0;i<nr_points;i++) 38 { 39 cx+= *X++; 40 cy+= *X++; 41 } 42 if(nr_points) 43 { 44 m=1.0/((double)nr_points); 45 c[0]=cx*m; 46 c[1]=cy*m; 47 } 48 else c[0]=c[1]=0; 49 } 50 51 inline void db_PointCentroid2D(double c[2],const double * const *X,int nr_points) 52 { 53 int i; 54 double cx,cy,m; 55 const double *temp; 56 57 cx=0;cy=0; 58 for(i=0;i<nr_points;i++) 59 { 60 temp= *X++; 61 cx+=temp[0]; 62 cy+=temp[1]; 63 } 64 if(nr_points) 65 { 66 m=1.0/((double)nr_points); 67 c[0]=cx*m; 68 c[1]=cy*m; 69 } 70 else c[0]=c[1]=0; 71 } 72 73 /*! Get the inhomogenous 3D-point centroid of nr_point inhomogenous 74 points in X*/ 75 inline void db_PointCentroid3D(double c[3],const double *X,int nr_points) 76 { 77 int i; 78 double cx,cy,cz,m; 79 80 cx=0;cy=0;cz=0; 81 for(i=0;i<nr_points;i++) 82 { 83 cx+= *X++; 84 cy+= *X++; 85 cz+= *X++; 86 } 87 if(nr_points) 88 { 89 m=1.0/((double)nr_points); 90 c[0]=cx*m; 91 c[1]=cy*m; 92 c[2]=cz*m; 93 } 94 else c[0]=c[1]=c[2]=0; 95 } 96 97 inline void db_PointCentroid3D(double c[3],const double * const *X,int nr_points) 98 { 99 int i; 100 double cx,cy,cz,m; 101 const double *temp; 102 103 cx=0;cy=0;cz=0; 104 for(i=0;i<nr_points;i++) 105 { 106 temp= *X++; 107 cx+=temp[0]; 108 cy+=temp[1]; 109 cz+=temp[2]; 110 } 111 if(nr_points) 112 { 113 m=1.0/((double)nr_points); 114 c[0]=cx*m; 115 c[1]=cy*m; 116 c[2]=cz*m; 117 } 118 else c[0]=c[1]=c[2]=0; 119 } 120 121 #endif /* DB_UTILITIES_GEOMETRY_H */ 122