studio_geo_algo_c.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 p 点
  16. /// \param start 线段起点
  17. /// \param end 线段终点
  18. /// \return 距离的平方
  19. double point_line_dist_square_c(const studio_point_c *p, const studio_point_c *start, const studio_point_c *end);
  20. /// Douglas-Peucker算法,线段压缩
  21. /// \param points 线段
  22. /// \param start 线段起点索引
  23. /// \param end 线段终点索引
  24. /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
  25. /// \param indices 存储简化后的点索引
  26. /// \param index_count 存储简化后的点索引数量
  27. void douglas_peucker_c(const studio_line_c *points, size_t start, size_t end, double epsilon, unsigned int *indices, unsigned int *index_count);
  28. /// 矢量线段抽稀算法
  29. /// \param line 线段
  30. /// \param max_points 压缩后最大点
  31. /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
  32. /// \param vacuate_line 抽稀后的线段
  33. /// \return
  34. bool line_vacuate_c(const studio_line_c *line, const int max_points, const double epsilon, studio_line_c *vacuate_line);
  35. /// 计算哈希值
  36. /// \param value
  37. /// \param size
  38. /// \return
  39. unsigned int hash(unsigned int value, unsigned int size);
  40. /// 移除重复点 保持原有顺序
  41. /// \param indices 点索引
  42. /// \param size 点索引数量
  43. void remove_duplicates(unsigned int **indices, unsigned int *size);
  44. #endif // STUDIO_GEO_ALGO_C_H