bluelover 发表于 2021-6-21 17:38:25

格林公式判断顺时针逆时针的问题

本帖最后由 bluelover 于 2021-6-21 17:40 编辑

用格林公式通过积分的方式可以很方便得到多段线的点序是顺时针还是逆时针。但对于如下半圆环图形,直接套用格林公式却无法准确判断顺时针还是逆时针。
请教下,有没有比较方便的算法分辨积分为0的情形。
谢谢!


如下是网上找到的一段格林公式的算法,仅供参考。
bool IsPolyClockwise(std::vector<point2d>& vPts){        //沿着多边形的边求曲线积分,若积分为正,则是沿着边界曲线正方向(逆时针),反之为顺时针   
    double d = 0;   
    const size_t nSize = vPts.size();   
    for (int i = 0; i < nSize - 1; ++i)   
   {      
         d += -0.5 * (vPts1].y + vPts.y)*(vPts1].x - vPts.x);   
    }      
         //这条边不能忘记    d += -0.5 * (vPts[0].y + vPts1].y)*(vPts[0].x - vPts1].x);      
      //小于零为顺时针,大于零为逆时针    return d < 0.0;;
}

yjtdkj 发表于 2021-7-14 15:55:05

多段线不是看凸度的吗?凸度有正负号,可以判断

bluelover 发表于 2021-7-14 22:06:43

凸度符号只能判断圆弧是顺时针还是逆时针吧。
我讲的是图示的这种,似乎用格林公式判断不了。

whyyshy 发表于 2021-8-16 03:46:58

我感觉你求得是带符号的面积

bluelover 发表于 2021-8-17 14:30:28

是的,积分的结果其实就是面积。正数为逆时针积分,负数为顺时针积分。
但我发的这个图会出现积分结果为0,因此无法判断。

bluelover 发表于 2021-8-17 14:56:09

不过我想到了问题所在,格林公式只单纯考虑顶点。
对于圆弧或者含圆弧的多段线应该考虑凸度问题,比如对于凸度不为0的部分,增加圆弧中点作为计算点即可。

yjtdkj 发表于 2021-8-17 15:16:01

bluelover 发表于 2021-7-14 22:06
凸度符号只能判断圆弧是顺时针还是逆时针吧。
我讲的是图示的这种,似乎用格林公式判断不了。

先取圆环的中心线,再判断顺时还是逆时,这样应该可行吧?
页: [1]
查看完整版本: 格林公式判断顺时针逆时针的问题