【问题标题】:Polygon Clipping多边形剪裁
【发布时间】:2017-10-28 00:34:26
【问题描述】:

我在这里遇到的问题很难用语言来描述......所以我将使用图片! 一般来说,我遇到的问题如下:

假设我有多边形 A:

它与一个开放的多边形 B 在两点相交:

我可以用什么算法从这个交叉点形成两个封闭的多边形? (请注意,这里有三个解决方案,我正在搜索的一个突出显示)

最好的解决办法是

  • 所有解决方案中最小的一个,因为:
  • A 包含 B

那么,关于在交叉点发生后如何生成 B(和新的 A)有什么建议吗?我是多边形数学(以及一般的 2D 形状交互)的新手,所以我不知道从哪里开始或从哪里看!

谢谢!

【问题讨论】:

  • 我相信您正在寻找的是所谓的多边形切片,因此您也可以搜索它。请注意,理论上您最终可能会得到超过 2 个部分,具体取决于行。
  • @GrandmasterB 哇!那东西很激烈......而且我也很头疼!也许对我的问题有更好的解决方案。我想要做的是用点填充多边形A,并让用户通过绘制线条将它们分成区域(因此是未闭合的多边形B)......这是我能想到的唯一方法......也许我将不得不将用户限制为单个线条以简化操作?
  • 哦,我知道了。一开始听起来很简单 :-) 您可能会四处寻找执行此操作的现有库。一些现有的 javascript 图形库可能具有此功能。
  • @GrandmasterB IDK...包含一个整个图形库来执行一项任务似乎有点极端...我会再研究一下!谢谢!

标签: javascript polygon clipping


【解决方案1】:

你用它们的轮廓“代表”你的多边形。轮廓是一个以某种方式排序的顶点序列(每个顶点由其平面坐标 x 和 y 给出)。 您在 A 内绘制的分段多段线是新多边形 B 的轮廓的一部分。同一轮廓的另一部分是轮廓 A 的两半之一。您选择两者中的哪一个(你说最小的,但不清楚这意味着什么……最小的区域?)。

最后,您通过使用也属于 B 的轮廓 A 的那部分为其完成一系列顶点来关闭 B 的轮廓。这是您所需多边形区域的轮廓/表示,这就是您的解决方案.

如果您有 2 个 B(一个完成轮廓 A 的前“一半”,另一个完成第二个),并且想要一个具有最小面积的 B,您只需计算两个 B 中每一个的面积(通过使用轮廓顶点的坐标)并选择最小的。您可以通过使用顶点坐标轻松搜索给出二维多边形面积的公式,或者您可以尝试自己推导它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-12-04
    相关资源
    最近更新 更多