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 #ifndef StraightLine3DH
00033 #define StraightLine3DH
00034
00035 #include <zeusbase/System/Float.h>
00036 #include <zeusmath/Geometry/Interfaces/IStraightLine3D.hpp>
00037 #include <zeusmath/Geometry/Vector3D.h>
00038
00039
00040 BEGIN_NAMESPACE_Zeus
00041
00042
00043
00046
00047 zeusmath_class TStraightLine3D : public IStraightLine3D
00048 {
00049 public:
00051 inline TStraightLine3D() { initAsAxisX(); }
00052
00054 TStraightLine3D(const IVector3D& rVecInitial, const IVector3D& rVecDirection,
00055 bool bConstructionByPointDirectionForm_Or_By2Points);
00056
00058 inline TStraightLine3D(const TStraightLine3D& rStraightLine3D) { *this = rStraightLine3D; }
00059
00061 inline TStraightLine3D(const IStraightLine3D& rStraightLine3D) { *this = rStraightLine3D; }
00062
00063
00065
00066 virtual inline const IVector3D& MQUALIFIER getInitialVector() const { return m_vecInitial; }
00067 virtual inline const IVector3D& MQUALIFIER getDirectionVector() const { return m_vecDirection; }
00068
00069 virtual inline void MQUALIFIER setInitialVector (const IVector3D& rVecInitial) { m_vecInitial = rVecInitial; }
00070 virtual inline void MQUALIFIER setDirectionVector(const IVector3D& rVecDirection) { m_vecDirection = rVecDirection; }
00071 virtual inline void MQUALIFIER assign(const IStraightLine3D& rStraightLine3D) { *this = rStraightLine3D; }
00072
00073 virtual inline void MQUALIFIER initAsAxisX() { *this = getAxisX(); }
00074 virtual inline void MQUALIFIER initAsAxisY() { *this = getAxisY(); }
00075 virtual inline void MQUALIFIER initAsAxisZ() { *this = getAxisZ(); }
00076
00077 virtual inline bool MQUALIFIER isAxisX() const { return m_vecInitial.isZeroVector() && m_vecDirection.isCollinear(TVector3D::getUnitVectorX()); }
00078 virtual inline bool MQUALIFIER isAxisY() const { return m_vecInitial.isZeroVector() && m_vecDirection.isCollinear(TVector3D::getUnitVectorY()); }
00079 virtual inline bool MQUALIFIER isAxisZ() const { return m_vecInitial.isZeroVector() && m_vecDirection.isCollinear(TVector3D::getUnitVectorZ()); }
00080
00081 virtual inline bool MQUALIFIER isValid() const { return !m_vecDirection.isZeroVector(); }
00082
00083 virtual inline bool MQUALIFIER isEqual (const IStraightLine3D& rStraightLine3D) const { return *this == rStraightLine3D; }
00084 virtual inline bool MQUALIFIER isParallel(const IStraightLine3D& rStraightLine3D) const { return *this || rStraightLine3D; }
00085
00086 virtual inline void MQUALIFIER calcPointFromParameter(const Float& fParameter, IVector3D& rVecPoint) const
00087 { rVecPoint.assign3D(m_vecInitial + m_vecDirection * fParameter); }
00088
00089 virtual bool MQUALIFIER calcParameterFromPoint(const IVector3D& rVecPoint, Float& fParameter) const;
00090
00091 virtual void MQUALIFIER calcClosestPointTo(const IVector3D& rVecPoint, IVector3D& rVecClosestPoint, bool bLimited = false) const;
00092 virtual Float MQUALIFIER calcDistanceTo(const IVector3D& rVecPoint, bool bLimited = false) const;
00093
00094 virtual inline bool MQUALIFIER containsPoint(const IVector3D& rVecPoint) const
00095 {
00096 return TFloat::isZero(calcDistanceTo(rVecPoint), FLOAT_PRECISION);
00097 }
00098
00099 virtual bool MQUALIFIER calcIntersectionPoint(const IStraightLine3D& rStraightLine3D,
00100 IVector3D& rVecIntersectionPoint) const;
00101
00102 virtual bool MQUALIFIER calcPointAtX(const Float& x, IVector3D& rVecPoint) const;
00103 virtual bool MQUALIFIER calcPointAtY(const Float& y, IVector3D& rVecPoint) const;
00104 virtual bool MQUALIFIER calcPointAtZ(const Float& z, IVector3D& rVecPoint) const;
00105
00106 virtual bool MQUALIFIER calcShortestConnection(const IStraightLine3D& rStraightLine3D,
00107 IVector3D& rVecPointOnThisStraightLine3D,
00108 IVector3D& rVecPointOnGivenStraightLine3D) const;
00109
00111 const TStraightLine3D& operator=(const IStraightLine3D& rStraightLine3D);
00112
00114 const TStraightLine3D& operator=(const TStraightLine3D& rStraightLine3D);
00115
00116
00118
00120 bool operator==(const IStraightLine3D& rStraightLine3D) const;
00121
00123 inline bool operator!=(const IStraightLine3D& rStraightLine3D) const { return !(*this == rStraightLine3D); }
00124
00126 bool operator||(const IStraightLine3D& rStraightLine3D) const;
00127
00128
00130
00131 static inline const TStraightLine3D& getAxisX() { return m_AxisX; }
00132 static inline const TStraightLine3D& getAxisY() { return m_AxisY; }
00133 static inline const TStraightLine3D& getAxisZ() { return m_AxisZ; }
00134
00135 private:
00137 TVector3D m_vecInitial;
00138 TVector3D m_vecDirection;
00139
00140
00141 static const TStraightLine3D m_AxisX;
00142 static const TStraightLine3D m_AxisY;
00143 static const TStraightLine3D m_AxisZ;
00144 };
00145
00146
00147 END_NAMESPACE_Zeus
00148
00149 #endif
00150