当前位置:   article > 正文

【C++】点到多边形最近的距离_寻找点离多边形最近的距离

寻找点离多边形最近的距离

可直接复制粘贴

  1. #include <iostream>
  2. #include <vector>
  3. #include <math.h>
  4. typedef struct point{
  5. double x = 0.;
  6. double y = 0.;
  7. }Point;
  8. /**
  9. *@brief 计算两点之间的距离
  10. *@param p1 坐标点1
  11. *@param p2 坐标点2
  12. *@return 两点距离
  13. */
  14. double Distance(Point p1, Point p2) {
  15. return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
  16. }
  17. /**
  18. *@brief 计算点到直线的距离
  19. *@param p 点
  20. *@param l1,l2 直线坐标
  21. *@return 距离
  22. */
  23. double PointToStraightDistance(Point p, Point l1, Point l2) {
  24. double a = Distance(l1, l2);
  25. double b = Distance(l1, p);
  26. double c = Distance(l2, p);
  27. if (b * b >= a * a + c * c) {
  28. return c;
  29. }
  30. if (c * c >= a * a + b * b) {
  31. return b;
  32. }
  33. double p0 = (a + b + c) / 2;
  34. double s = sqrt(p0 * (p0 - a) * (p0 - b) * (p0 - c));
  35. return 2 * s / a;
  36. }
  37. /**
  38. *@brief 点到多边形最近的距离
  39. *@param p 点
  40. *@param polygon 多边形坐标列表
  41. *@return 最近的距离
  42. */
  43. double ClosestDistance(Point p, std::vector<Point> polygon)
  44. {
  45. double minDistance = PointToStraightDistance(p, polygon[0], polygon[polygon.size() - 1]);
  46. for (int i = 0; i < polygon.size() - 1; i++) {
  47. double distance = PointToStraightDistance(p, polygon[i], polygon[i + 1]);
  48. if (distance < minDistance) {
  49. minDistance = distance;
  50. }
  51. }
  52. return minDistance;
  53. }
  54. int main()
  55. {
  56. return 0;
  57. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/562772
推荐阅读
相关标签
  

闽ICP备14008679号