#ifndef __USG_INDIRECTALG_H__ #define __USG_INDIRECTALG_H__ #include "usg_common.h" #include "graph.h" struct Record { std::string id; time_t timestamp; Point coordinate; }; struct Status; class IndirectAlg { Figure frame; // 逆行持续时间,要超过这个时间才算逆行 time_t keepTime; // 最小移动距离,要超过这个距离才算移动 double minDistance; // 代表正确行走方向的向量 Vector2 direction; // 状态缓存 std::map statusMap; std::atomic mterminate; std::thread mthread; void threadRoutine(); public: IndirectAlg(); IndirectAlg(const std::initializer_list & edges, const Vector2 & _directionconst , const time_t & _keepTime, const double _minDistance); /** * @points 组成观测区域的彼此相邻的点 * @_direction 正确行进的方向方向 * @_keepTime 保持时间 * @minDistance 最小移动距离,要超过这个距离才算移动 */ IndirectAlg(const std::initializer_list & points, const Vector2 & _direction, const time_t & _keepTime, const double _minDistance); ~IndirectAlg(); void printRecord(int tag, Record &record); /** * 是否逆行 */ bool isRetrograde(Record &record); }; #endif