INDI Alignment Layer
0.0
|
00001 #ifndef ALIGNMENTDATABASE_H 00002 #define ALIGNMENTDATABASE_H 00003 00004 #include <vector> 00005 #include "Wm5ConvexHull3.h" 00006 #include "Wm5Triangle3.h" 00007 #include "Wm5Matrix3.h" 00008 00017 class CAlignmentDatabase 00018 { 00019 public: 00033 typedef enum { HOURS_DEGREES, DEGREES_DEGREES, RADIANS_RADIANS} CoordinateSystemUnits; 00034 00036 CAlignmentDatabase(); 00038 virtual ~CAlignmentDatabase(); 00039 00042 void SetLowerCoordinateSystemUnits(CoordinateSystemUnits Units) { LowerCoordinateSystemUnits = Units; } 00043 00053 bool AddAlignmentPoint(const double ReferenceTime, const double RightAscension, const double Declination, const double Axis1, const double Axis2, bool Recalculate = false); 00054 00066 bool RecalculateDatabase(); 00067 00075 bool TransformUpperToLower(const double RightAscension, const double Declination, double& Axis1, double& Axis2); 00076 00084 bool TransformLowerToUpper(const double Axis1, const double Axis2, double& RightAscension, double& Declination); 00085 00090 bool Save(const std::string& Filename); 00091 00096 bool Load(const std::string& Filename); 00097 00102 bool Append(const std::string& Filename); 00103 00104 protected: 00105 private: 00106 static const double Epsilon = 0.0000001; // An arbitrary guess 00112 struct AlignmentPoint 00113 { 00114 AlignmentPoint(double ReferenceTime, double RightAscension, double Declination, double Axis1, double Axis2) : 00115 ReferenceTime(ReferenceTime), 00116 RightAscension(RightAscension), 00117 Declination(Declination), 00118 Axis1(Axis1), 00119 Axis2(Axis2) {} 00120 // All angles are in radians 00121 double ReferenceTime; 00122 double RightAscension; 00123 double Declination; 00124 double Axis1; 00125 double Axis2; 00126 }; 00127 00128 std::vector<AlignmentPoint> AlignmentPoints; 00129 00130 struct TinFacet 00131 { 00132 Wm5::Triangle3d Facet; 00133 Wm5::Matrix3d TransformationMatrix; 00134 }; 00135 typedef std::vector<TinFacet> TinFacets; 00136 00137 TinFacets UpperLayerTinFacets; 00138 TinFacets LowerLayerTinFacets; 00139 00140 CoordinateSystemUnits LowerCoordinateSystemUnits; 00141 00142 double RightAscensionToDummyHourAngle(const double RightAscension, const double ReferenceTime); 00143 double DummyHourAngleToRightAscension(const double DummyHourAngle, const double ReferenceTime); 00144 Wm5::Vector3d MakeUpperDirectionCosine(const double RightAscension, const double Declination, const double ReferenceTime); 00145 Wm5::Vector3d MakeLowerDirectionCosine(const double Axis1, const double Axis2, const double ReferenceTime); 00146 const double UTCNow(); 00147 00148 typedef enum { UPPER_TO_LOWER, LOWER_TO_UPPER} Direction; 00149 const Wm5::Matrix3d FindTransformationmatrix(const Wm5::Vector3d DirectionCosine, Direction Direction); 00150 }; 00151 00152 00153 #endif // ALIGNMENTDATABASE_H