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

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // 
  3. // CyberCalib.h
  4. //
  5. // Daniel Wood
  6. //
  7. // Class for storing calibration data for the SLSS and
  8. // reading the data from a calibration file.
  9. //
  10. // Basically just a bag of doubles and a reader.
  11. //
  12. //############################################################
  13. #ifndef CyberCalib_h_
  14. #define CyberCalib_h_
  15. #include <map.h>
  16. #include <rope.h>
  17. #include "Xform.h"
  18. struct CyberCalib
  19. {
  20.                                 // *** first the input values
  21.   
  22.                                 // turn axis.  axis and point on it.
  23.     double axturn[3];
  24.     double axturn0[3];
  25.                                 // nod axis.  axis and point on it.
  26.     double axnod[3];
  27.     double axnod0[3];
  28.                                 // optical correction matrix
  29.     double A[16];
  30.                                 // transforms from working value to scanner
  31.     double opt_frm_v[16];
  32.     double opt_frm_h[16];
  33.                                 // horizontal arm vector.  for each rotation times
  34.                                 // up and down
  35.     double arm_up1[3];
  36.     double arm_up2[3];
  37.     double arm_up3[3];
  38.     double arm_up4[3];
  39.     double arm_down1[3];
  40.     double arm_down2[3];
  41.     double arm_down3[3];
  42.     double arm_down4[3];
  43.     
  44.                                 // screw parameters
  45.     double dnssp;               // dist. for nod screw start pivot to axis
  46.     double dnsep;               // dist. for nod screw end   pivot to axis
  47.     double offn;                // offset dist. for nod when screw length = -6
  48.     double dtssp;               // dist. for turn screw start pivot to axis
  49.     double dtsep;               // dist. for turn screw end   pivot to axis
  50.     double offt;                // offset dist. for turn when screw length = -6
  51.     double minscrew;
  52.                                 // *** then the derived values
  53.                                 // pre-computed values for quickly calculating the
  54.                                 // angle from a screw value.  these are used by
  55.                                 // the SCREW_TO_ANGLE and ANGLE_TO_SCREW macros
  56.                                 // in CyberXform.cc
  57.     double n_h1;                // offn - minscrew
  58.     double n_h2;                // dnssp^2 + dnsep^2
  59.     double n_h3;                // 1 / (2 * dnssp * dnsep)
  60.     double n_h4;                //acos((dnssp*dnssp + dnsep*dnsep - offn*offn)/(2*dnssp*dnsep))
  61.     double t_h1;                // offt - minscrew
  62.     double t_h2;                // dtssp^2 + dtsep^2
  63.     double t_h3;                // 1 / (2 * dtssp * dtsep)
  64.     double t_h4;                //acos((dtssp*dtssp + dtsep*dtsep - offt*offt)/(2*dtssp*dtsep))
  65.     CyberCalib();
  66. private:
  67.     typedef map<crope, vector<double> > RopeDV; // rope to double vector
  68.     
  69.     void setDefault();          // set input values to their compiled-in defaults
  70.     bool setMap( RopeDV &s2d ); // set input values to their compiled-in defaults
  71.     void setDerived();          // set (compute) the derived values from the compiled-in values
  72.     bool readNumbers( istream &in, RopeDV &m );
  73. };
  74.     
  75. #endif