当前位置:   article > 正文

根据格林公式判断多边形顺时针和逆时针_格林求顺逆时针

格林求顺逆时针

网上可以搜索到相关的论文和代码,但是实际测试发现代码不完整,在多边形比较复杂或者特殊的时候所得的结果不正确,发现原来是代码缺少了一条边导致的,只需要加上最后一条边即可。

以下是修改之后的完整代码:

  1. bool IsPolyClockwise(std::vector<point2d>& vPts)
  2. {
  3.     //沿着多边形的边求曲线积分,若积分为正,则是沿着边界曲线正方向(逆时针),反之为顺时针
  4.     double d = 0;
  5.     const size_t nSize = vPts.size();
  6.     for (int i = 0; i < nSize - 1; ++i)
  7.     {
  8.         d += -0.5 * (vPts[i + 1].y + vPts[i].y)*(vPts[i + 1].x - vPts[i].x);
  9.     }
  10.     
  11.     //这条边不能忘记
  12.     d += -0.5 * (vPts[0].y + vPts[nSize - 1].y)*(vPts[0].x - vPts[nSize - 1].x);
  13.     
  14.     //小于零为顺时针,大于零为逆时针
  15.     return d < 0.0;;
  16. }

感谢原作者的分享和参考。

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