【问题标题】:Prevent clipper from merging polygons?防止裁剪器合并多边形?
【发布时间】:2015-11-11 11:23:21
【问题描述】:

当我计算两个相互接触的形状之间的差异时(例如,矩形 A 在更大的矩形 B 中,矩形 A 上有一个孔)和一个剪辑形状(矩形 C),这两个接触的形状被合并,因为它们的共享相同的边缘,然后执行剪辑。

剪切时是否可以避免合并触摸形状?

这里是两个形状(绿色的A和红色的B)和一个剪辑(所以操作是:A&B -剪辑)之间的区别示例,它返回蓝色的形状:

我想要这两种形状,而不是蓝色矩形:

而交叉点会给出:

这会给我我想要的四种形状:

我知道我可以分别对每个形状执行操作,但恐怕成本会更高。

注意

这是 XOR 的结果:

【问题讨论】:

  • 使用异或代替差分。
  • 我在我的问题中忘记了一些东西,所以我编辑了它,现在应该更清楚了。 XOR 没有帮助......我认为唯一的解决方案是单独执行操作,这就是我现在所做的。
  • 我已经在stackoverflow.com/questions/46235176/… 上发布了一个类似的问题你找到解决方案了吗?最后,我将处理超过 200 万个形状。我认为单独剪裁它们对性能没有好处。
  • 我没有找到Clipper lib的解决方案,但我自己计算了操作,请参阅以下答案。

标签: polygons clipperlib


【解决方案1】:

在手中我自己计算操作:

  1. 计算边缘(剪辑形状和其他形状)之间的交点。
  2. 对于每个顶点:按角度对其边进行排序(强制)
  3. 顺时针和逆时针遍历每条边以计算带有孔的新多边形

这已经足够高效了,但是我需要一个空间分区数据结构来对边进行排序并快速它们的交点。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多