Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef LINE_HPP_
00038 #define LINE_HPP_
00039 #include <Eigen/Dense>
00040
00041 namespace labust
00042 {
00043 namespace math
00044 {
00048 class Line
00049 {
00050 enum {xp,yp,zp};
00051 public:
00055 Line():
00056 Gamma(0),
00057 Xi(0),
00058 T1(Eigen::Vector3d::Zero()),
00059 T2(Eigen::Vector3d::Ones()){};
00063 double calculatedH(double x0, double y0, double z0) const
00064 {
00065 double Lp = sqrt((T2(xp)-T1(xp))*(T2(xp)-T1(xp))+(T2(yp)-T1(yp))*(T2(yp)-T1(yp)));
00066
00067 return ((T2(xp)-T1(xp))*(T1(yp)-y0)-(T1(xp)-x0)*(T2(yp)-T1(yp)))/Lp;
00068 }
00072 double calculatedV(double x0, double y0, double z0) const
00073 {
00074 double Lp = sqrt(std::pow(T2(xp)-T1(xp),2) + std::pow(T2(yp)-T1(yp),2));
00075 double L = sqrt(Lp*Lp + std::pow(T2(zp) - T1(zp),2));
00076 double n = (T2(xp)-T1(xp))*(x0-T1(xp))+(T2(yp)-T1(yp))*(y0-T1(yp));
00077 n *= -(T2(zp)-T1(zp));
00078 n -= (T1(zp)-z0)*Lp*Lp;
00079
00080 return n/(Lp*L);
00081 }
00088 void setLine(const Eigen::Vector3d& T1, const Eigen::Vector3d& T2)
00089 {
00090 this->T1 = T1;
00091 this->T2 = T2;
00092
00093 if ((T1(0) == T2(0)) && (T1(1) == T2(1))) this->T2(0) = -1;
00094
00095 this->Gamma = atan2(T2(yp) - T1(yp),T2(xp) - T1(xp));
00096 this->Xi = atan2(T2(zp) - T1(zp),
00097 sqrt(std::pow(T2(xp)-T1(xp),2) + std::pow(T2(yp)-T1(yp),2)));
00098 }
00102 inline const Eigen::Vector3d& getT1()
00103 {
00104 return T1;
00105 }
00109 inline const Eigen::Vector3d& getT2()
00110 {
00111 return T2;
00112 }
00116 inline double xi(){return this->Xi;};
00120 inline double gamma(){return this->Gamma;};
00121
00122 protected:
00126 double Gamma, Xi;
00130 Eigen::Vector3d T1,T2;
00131 };
00132 }
00133 }
00134
00135
00136 #endif