absorient.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // absorient.h
  3. // Kari Pulli
  4. // 06/06/97
  5. // 
  6. // Two methods for solving the rotation and translation for
  7. // registering two sets of 3D points.
  8. //
  9. // Horn's method takes as input two lists of corresponding
  10. // 3D points. It calculates in one step the optimum motion
  11. // to align the sets. The starting point does not have to
  12. // be close to the solution.
  13. //
  14. // Chen & Medioni's method takes as input a list of points
  15. // and a list of planes, one plane for each point. The 
  16. // algorithm tries to move the sets so that the points get
  17. // close to their corresponding planes. It is assumed that
  18. // only small rotations are needed, i.e., the sets are 
  19. // in approximate registration.
  20. //############################################################
  21. #ifndef _ABSORIENT_H_
  22. #define _ABSORIENT_H_
  23. typedef enum {
  24.   alignHorn,
  25.   alignChenMedioni
  26. } AlignmentMethod;
  27. //
  28. // Alignment methods:
  29. //   horn_align does point-to-point
  30. //   chen_medioni does point-to-plane
  31. // Both methods calculate the transformation necessary to align
  32. // src to dst, as a quaternion rotation and a translation.
  33. //
  34. // Meanings of parameters:
  35. //   src        Source points to align
  36. //   dst        Target positioning
  37. //   nrmDst     Normals at points in dst
  38. //   n          Number of point pairs
  39. //   q[7]       Registration quaternion; 0..3 rot, 4..6 trans
  40. //
  41. // Horn's method: calculates transformation from points to points
  42. void
  43. horn_align(Pnt3 *src,      // source points to align
  44.    Pnt3 *dst,      // target orientation
  45.    int   n,        // how many pairs
  46.    double q[7]);   // registration quaternion
  47. // Chen-Medioni method: calculates transformation from points to planes
  48. void
  49. chen_medioni(Pnt3 *src,    // source points to align
  50.      Pnt3 *dst,    // target orientation (points on tangent planes)
  51.      Pnt3 *nrmDst, // and orientation of planes at target
  52.      int   n,      // how many pairs
  53.      double q[7]); // registration quaternion
  54. #endif // _ABSORIENT_H_