明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1275|回复: 6

[求助] 格林公式判断顺时针逆时针的问题

[复制链接]
发表于 2021-6-21 17:38 | 显示全部楼层 |阅读模式
本帖最后由 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 * (vPts[i + 1].y + vPts.y)*(vPts[i + 1].x - vPts.x);   
    }        
         //这条边不能忘记    d += -0.5 * (vPts[0].y + vPts[nSize - 1].y)*(vPts[0].x - vPts[nSize - 1].x);        
      //小于零为顺时针,大于零为逆时针    return d < 0.0;;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2021-7-14 15:55 | 显示全部楼层
多段线不是看凸度的吗?凸度有正负号,可以判断
 楼主| 发表于 2021-7-14 22:06 | 显示全部楼层
凸度符号只能判断圆弧是顺时针还是逆时针吧。
我讲的是图示的这种,似乎用格林公式判断不了。
发表于 2021-8-16 03:46 | 显示全部楼层
我感觉你求得是带符号的面积
 楼主| 发表于 2021-8-17 14:30 | 显示全部楼层
是的,积分的结果其实就是面积。正数为逆时针积分,负数为顺时针积分。
但我发的这个图会出现积分结果为0,因此无法判断。
 楼主| 发表于 2021-8-17 14:56 | 显示全部楼层
不过我想到了问题所在,格林公式只单纯考虑顶点。
对于圆弧或者含圆弧的多段线应该考虑凸度问题,比如对于凸度不为0的部分,增加圆弧中点作为计算点即可。
发表于 2021-8-17 15:16 | 显示全部楼层
bluelover 发表于 2021-7-14 22:06
凸度符号只能判断圆弧是顺时针还是逆时针吧。
我讲的是图示的这种,似乎用格林公式判断不了。

先取圆环的中心线,再判断顺时还是逆时,这样应该可行吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 02:57 , Processed in 0.198540 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表