
Hi, We recently wrote some code that did some computaional mechanics and had several bugs due to mixing frames of reference. Prompted by recent discussions of affine spaces, I have developed some simple classes for tracking different spaces, points and displacements at compile time. eg. struct frame1 {}; struct frame2 {}; typedef ublas::bounded_vector<double,3> vector; typedef math::point<vector, frame1> point; typedef math::displacement<vector, frame1> displacement; point p1(ublas::scalar_vector<double>(3,1.)); point p2(ublas::scalar_vector<double>(3,1.)); displacement d1(ublas::scalar_vector<double>(3,1.)); p2=p1+d1; d1=p1+d1; //fails p1=p1+p1; //fails vector p3(ublas::scalar_vector<double>(3,1.)); vector d2(ublas::scalar_vector<double>(3,1.)); math::point_ref<frame1>(p3)+=d1; math::point_ref<frame2>(p3)+=d1; // fails math::point_ref<frame1>(p3)+=math::displacement_ref<frame1>(d2); math::point_ref<frame2>(p3)+=math::displacement_ref<frame2>(d2); math::point_ref<frame1>(p3)+=math::displacement_ref<frame2>(d2); // fails The code is available in the math-geometry section of the boost vault at http://www.boost-consulting.com/vault/index.php?direction=0&order=&directory=Math%20-%20Geometry& as affine-0.0.3.tar.gz Comments welcome on the utility of the approach and on the design are most welcome. Hugo
participants (1)
-
Hugo Duncan