1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /**
- ******************************************************************************
- * @file : studio_geo_algo_c.h
- * @author : wangyingjie
- * @brief : C 语言版 几何算法库: DP算法
- * @attention : None
- * @date : 2025/5/11
- ******************************************************************************
- */
- #ifndef STUDIO_GEO_ALGO_C_H
- #define STUDIO_GEO_ALGO_C_H
- #include "studio_geo_c.h"
- /////////////////// 矢量(线)抽稀算法 ///////////////////
- /// 计算点到线段的距离的平方
- /// \param p 点
- /// \param start 线段起点
- /// \param end 线段终点
- /// \return 距离的平方
- double point_line_dist_square_c(const studio_point_c *p, const studio_point_c *start, const studio_point_c *end);
- /// Douglas-Peucker算法,线段压缩
- /// \param points 线段
- /// \param start 线段起点索引
- /// \param end 线段终点索引
- /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
- /// \param indices 存储简化后的点索引
- /// \param index_count 存储简化后的点索引数量
- void douglas_peucker_c(const studio_line_c *points, size_t start, size_t end, double epsilon, unsigned int *indices, unsigned int *index_count);
- /// 矢量线段抽稀算法
- /// \param line 线段
- /// \param max_points 压缩后最大点
- /// \param epsilon 抽稀容差,若某点到当前线段的最大垂直距离超过epsilon,则保留该点,单位与适量坐标系的单位一致
- /// \param vacuate_line 抽稀后的线段
- /// \return
- bool line_vacuate_c(const studio_line_c *line, const int max_points, const double epsilon, studio_line_c *vacuate_line);
- /// 计算哈希值
- /// \param value
- /// \param size
- /// \return
- unsigned int hash(unsigned int value, unsigned int size);
- /// 移除重复点 保持原有顺序
- /// \param indices 点索引
- /// \param size 点索引数量
- void remove_duplicates(unsigned int **indices, unsigned int *size);
- #endif // STUDIO_GEO_ALGO_C_H
|