studio_geo_algo_c.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. ******************************************************************************
  3. * @file : studio_geo_algo_c.h
  4. * @author : wangyingjie
  5. * @brief : C 语言版 几何算法库: DP算法
  6. * @attention : None
  7. * @date : 2025/5/11
  8. ******************************************************************************
  9. */
  10. #ifndef STUDIO_GEO_ALGO_C_H
  11. #define STUDIO_GEO_ALGO_C_H
  12. #include "studio_geo_c.h"
  13. /////////////////// 矢量(线)抽稀算法 ///////////////////
  14. /// 计算两点之间的距离的平方
  15. /// @param p1
  16. /// @param p2
  17. /// @return
  18. double distance_squared(const studio_point_c *p1, const studio_point_c *p2);
  19. /// 计算点到线段的距离的平方
  20. /// \param p 点
  21. /// \param start 线段起点
  22. /// \param end 线段终点
  23. /// \return 距离的平方
  24. double point_line_dist_square_c(const studio_point_c *p, const studio_point_c *start, const studio_point_c *end);
  25. /// Douglas-Peucker算法,线段压缩
  26. /// \param points 线段
  27. /// \param start 线段起点索引
  28. /// \param end 线段终点索引
  29. /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
  30. /// \param indices 存储简化后的点索引
  31. /// \param index_count 存储简化后的点索引数量
  32. void douglas_peucker_c(const studio_line_c *points, size_t start, size_t end, double epsilon, unsigned int *indices,
  33. unsigned int *index_count);
  34. /// 矢量线段抽稀算法
  35. /// \param line 原始线段
  36. /// \param max_points 压缩后最大点
  37. /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
  38. /// \param vacuate_line 抽稀后的线段
  39. /// \return
  40. bool line_vacuate_c(const studio_line_c *line, const int max_points, const double epsilon, studio_line_c *vacuate_line);
  41. /// 矢量线段抽稀算法 大地坐标系(GCS), 坐标点为十进制经纬度
  42. /// @param line 原始线段
  43. /// @param max_points 压缩后最大点
  44. /// @param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,这里单位是米
  45. /// @param vacuate_line 抽稀后的线段
  46. /// @return
  47. bool line_vacuate_gcs_c(const studio_line_c *line, const int max_points, const double epsilon,
  48. studio_line_c *vacuate_line);
  49. /////////////////// 移除线段中的离群点 ///////////////////
  50. /// 计算哈希值
  51. /// \param value
  52. /// \param size
  53. /// \return
  54. unsigned int hash(unsigned int value, unsigned int size);
  55. /// 移除重复点 保持原有顺序
  56. /// \param indices 点索引
  57. /// \param size 点索引数量
  58. void remove_duplicates(unsigned int **indices, unsigned int *size);
  59. /// 移除线段中的离群点
  60. /// @param line 原始线段
  61. /// @param distance 离群点距离
  62. /// @param outliers_line 滤波后的线段
  63. /// @return
  64. bool remove_outliers_c(const studio_line_c *line, double distance, studio_line_c *outliers_line);
  65. #endif // STUDIO_GEO_ALGO_C_H