Changeset 4545 in orxonox.OLD for orxonox/trunk/src/lib/collision_detection
- Timestamp:
- Jun 7, 2005, 11:15:57 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/lib/collision_detection/obb_tree_node.cc
r4544 r4545 57 57 float facelet[length]; //!< surface area of the i'th triangle of the convex hull 58 58 float face; //!< surface area of the entire convex hull 59 float centroid[length]; //!< centroid of the i'th convex hull 59 Vector centroid[length]; //!< centroid of the i'th convex hull 60 Vector centre; //!< the centre of the entire hull 60 61 OBB* obb = new OBB(); //!< the new obb to add 61 62 Vector p, q, r; //!< holder of the polygon data, much more conveniant to work with Vector than sVec3d 62 Vector t1, t2; 63 64 /* fist compute all the convex hull face/facelets */ 65 for(int i = 0; i < length; i+=3) 63 Vector t1, t2; //!< temporary values 64 float covariance[3][3]; //!< the covariance matrix 65 66 /* fist compute all the convex hull face/facelets and centroids */ 67 for(int i = 0; i < length; i+=3) /* FIX-ME-QUICK: hops of 3, array indiscontinuity*/ 66 68 { 67 69 p = *(verticesList + i); … … 73 75 /* finding the facelet surface via cross-product */ 74 76 facelet[i] = 0.5f * fabs( t1.cross(t2).len() ); 75 76 77 /* update the entire convex hull surface */ 77 78 face += facelet[i]; 78 }79 79 80 80 81 /* calculate the cetroid of the hull triangles */ 82 centroid[i] = (p + q + r) * 1/3; 83 /* now calculate the centroid of the entire convex hull, weighted average of triangle centroids */ 84 centre += centroid[i] * facelet[i]; 85 } 86 /* take the average of the centroid sum */ 87 centre /= face; 88 89 /* now calculate the covariance matrix - if not written in three for-loops, it would compute faster: minor */ 90 for(int j = 0; j < 3; ++j) 91 { 92 for(int k = 0; k < 3; ++k) 93 { 94 for(int i = 0; i < length; i+=3) 95 { 96 p = *(verticesList + i); 97 q = *(verticesList + i + 1); 98 r = *(verticesList + i + 2); 99 100 covariance[j][k] = facelet[i] / (12.0f * face) * (9.0f * centroid[i][j] * centroid[i][k] + p[j]* p[k] + 101 q[j] * q[k] + r[j]*r[k]) - centre[j] * centre[k]; 102 } 103 } 104 } 81 105 } 82 106
Note: See TracChangeset
for help on using the changeset viewer.