typedef enum LocusType { LT_LINEAR =0, LT_B_SPLINE, LT_STEP, }LocusType; class LocusBase { public: int m_time; protected: LocusBase(LocusType type); const LocusType mc_type; }; template<class Point > class Locus : public LocusBase// 轨迹 { public: Locus(LocusType type); struct Node { Node():m_time(0), m_p() { } Node(const Node &n):m_time(n.m_time), m_p(n.m_p) { } Node(int time, Point &p):m_time(time), m_p(p) { } int m_time; Point m_p; booloperator< (int time) const { return m_time < time; } }; void loadData(constchar*data); virtualint getInterval(int time, Point &result) =0; ::std::vector< Node > m_data; }; /**//// LocusLinear /// @note 线性插值轨迹 template<class Point > class LocusLinear : public Locus< Point > { public: LocusLinear(); int getInterval(int time, Point &result); }; /**//// LocusBspline /// @note B样条曲线插值轨迹 template<class Point > class LocusBspline : public Locus< Point > { public: LocusBspline(); int getInterval(int time, Point &result); }; /**//// LocusStep /// @note 位置直接跳变的轨迹 template<class Point > class LocusStep : public Locus< Point > { public: LocusStep(); int getInterval(int time, Point &result); };