locate_algorithm.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef _LOCATE_ALGORITHM_H
  2. #define _LOCATE_ALGORITHM_H
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "classdef.h"
  6. #define M_PI 3.14159265358979323846 // 角度转弧度 角度 * pi / 180
  7. #define M_PI_2 1.57079632679489661923
  8. #define M_PI_4 0.785398163397448309616
  9. // 最终定位坐标计算公式
  10. void AOAformula(struct _coordinate* ant, double angle, struct _coordinate* tar, bool is_line = false, double z_offset = 0);
  11. // 两个坐标之间的距离计算公式
  12. double Distanceformula(struct _coordinate* ant, struct _coordinate* last);
  13. // 三点定位
  14. void locatebycordinate(struct _coordinate** coor_list, struct _coordinate* dest);
  15. // 定位算法
  16. void algorithm_locate(struct _coordinate** coor_list, int size, struct _coordinate* hist, struct _coordinate* dest, double dist_limit, double z_offset);
  17. void algorithm_locate_ex(_coordinate** coor_list, int coor_size, _coordinate* hist, _coordinate* dest, double dist_limit);
  18. double getAngleByCoordinate(_coordinate* p1, _coordinate* p2);
  19. double getAngleByAngle(_coordinate* p1, _coordinate* p2);
  20. double getDistance(_coordinate* p1, _coordinate *p2);
  21. _coordinate* getCross(_coordinate* p1, _coordinate* p2);
  22. void calcCoordinate(_coordinate* p1, double dist, double angle, _coordinate* dest);
  23. bool is_all_inline(_coordinate** coor_list, int cnt );
  24. void HeapSort(_coordinate** pCoordinateArray,int nLen);
  25. void BuildMaxHeap(_coordinate** pCoordinateArray,int nLen);
  26. void AdjustMaxHeap(_coordinate** pCoordinateArray,int n,int nHeapSize);
  27. void SwapElement(_coordinate* a,_coordinate*b);
  28. void SelectSort(_coordinate** pCoordinateArray,int nLen);
  29. /*
  30. * 定位算法
  31. *
  32. */
  33. class LocateAlgorithm{
  34. public:
  35. //TOF算法函数
  36. //static POS * Pos(STATION *s,int sta_num,int ant,double dist,INFO_PRE info_pre);
  37. //static RESULT* GetPos(STATION *s,int sta_num,int ant,double dist,int i);
  38. static POS* Pos(ReaderPathMap rpm,int sta_num,int ant,double dist,INFO_PRE info_pre);
  39. static RESULT* GetPos(ReaderPathMap rpm,int sta_num,int ant,double dist,int i);
  40. //TDOA算法函数
  41. static POS* Pos(ReceiveDataMap* pRdm,TDOAReaderPathMap trpm);
  42. static POS* Pos(POS* pos,TDOAReaderPathMap trpm);
  43. static RESULT* GetPos(ReaderPath * pRP,double dist,int i);
  44. static bool CheckPosInValid(POS* pos,ReceiveDataMap* pRdm,double dScale);
  45. static bool IsOnMap(POS* pos,TDOAReaderPathMap trpm);
  46. };
  47. #endif