V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Visitor233
V2EX  ›  算法

求个思路:判断两个及以上的图形是否重叠。

  •  1
     
  •   Visitor233 · 34 天前 · 1701 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://img.picui.cn/free/2024/10/20/6715285d254d4.png
    在做 coreldraw 插件开发,先只考虑重叠,包含和相切稍后。官方接口提供了一种方式。来这问大佬只是想扩展下思路,以防万一。方式不限。几年没来 v2 发帖了
    13 条回复
    Visitor233
        1
    Visitor233  
    OP
       34 天前
    补充下内容,软件接口会提供图形对象供访问,一次处理 1 至 1000 个静态图形
    yankebupt
        2
    yankebupt  
       33 天前
    呼叫计算机图形学大神。
    这个黄三角边缘肉眼可见是B样曲线的,还不止是多边形……这重叠怎么判断……矢量图……
    Mark 等更新
    xuanbg
        3
    xuanbg  
       33 天前
    什么重叠啊,数学上这叫「相交」。判断多边形是否相交即可
    shinsekai
        4
    shinsekai  
       33 天前
    先判断矩形框是否相交,如果相交,再判断多边形是否相交
    Visitor233
        5
    Visitor233  
    OP
       33 天前 via Android
    @xuanbg
    @shinsekai
    是的。图中矩形框相交肯定是不够满足的。甲方只会认为黄色三角和红色矩形两个没挨到一起。
    xtreme1
        6
    xtreme1  
       33 天前
    看看能否转成矢量, 然后 Boost.Geometry
    cheng6563
        7
    cheng6563  
       33 天前
    转点阵图
    jones2000
        8
    jones2000  
       33 天前
    用 2 种纯色的是填充图形, 然后把整个图保存下, 读出图片的所有的像素和颜色, 如果如果存在重叠, 对应的像素颜色就不是这 2 个纯色的。
    dt201909
        9
    dt201909  
       33 天前
    @Visitor233 #5 矩形框判断是必须的,目的还是提效,特别是针对批量的情况
    dt201909
        10
    dt201909  
       33 天前
    @Visitor233 #5 看到曲线了,能不能转多段线再判断。多边形相交貌似可以通过投影的算法来做。
    最粗暴的方式就是,判断是否有任意线有交点(遍历),效率最低,但是可以硬写出来
    dt201909
        11
    dt201909  
       33 天前
    coreldraw 插件给我感觉似乎很小众,咋跑进这一行的...
    Visitor233
        12
    Visitor233  
    OP
       33 天前 via Android
    @dt201909 我查了好多资料,大部分方案都是图形装入盒子,然后检测盒子的直线边有无重叠。STA 分离轴算法对凹图形(五角星)不好处理。
    sillydaddy
        13
    sillydaddy  
       33 天前
    换个思路:根据各图形合并之后的面积,是否小于图形面积的和,来判断是否有重叠。

    首先计算出这 1000 个图形(G0,G1,G2,...,G999)的布尔并,得到图形 Gu ,然后计算 Gu 的面积 Au (面积公式很简单)。如果 Au 小于这 1000 个图形各自面积的和,说明有重叠。

    布尔运算、求面积,都可以使用成熟高效的 clipper 库。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1813 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:29 · PVG 00:29 · LAX 08:29 · JFK 11:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.