![]() |
1
16
我最近不得不这么做。就像在图中一样,只沿着多边形走是不适用于凹多边形的。下面是我的算法的草图,灵感来自 Greiner-Hormann 多边形裁剪算法。分割比多边形剪切更容易也更难。更容易,因为你只剪贴一条线而不是一个矩形或另一个多边形;更难,因为你需要保持两边。
|
![]() |
2
13
这是可能的,但是如果多边形不是凸的,那么将它分割成一条线可能会导致两个以上的多边形。 遍历多边形边,并为每个边确定它是否与直线相交。找到第一个这样的边缘。继续遍历,直到找到另一条这样的边,但将沿途遇到的每个边添加到一个新多边形(包括第一条边被“此边”上的线分割的部分,以及最后一条边的部分)。最后,向新多边形添加闭合边。现在继续处理边-在直线的另一侧,以相同的方式创建另一个多边形。现在有两个多边形在直线上分割。如果你小心的话,同样的技术也可以将非凸多边形分割成多个多边形。 当心角情况,例如线与多边形顶点相交,线与多边形根本不相交。 编辑: 正如Xan指出的,这并不能正确地处理所有非凸的情况。这可以通过对算法的小修改来解决。在按上述方式添加闭合边之前,必须首先检查原始多边形的任何其他边是否与该闭合边相交;如果是,则只能闭合到该边,并继续处理该点的其他边。 |
![]() |
3
2
你只需要一个多边形剪辑。您可以在此处查看概述: Polygon clipping 我认为这里有一些Penty实现,您可以从中学习。 |
![]() |
4
1
这是完全可能的。我假设您使用的是Java2D。您已经在其中找到了一个名为intersects的方法。用它你可以做到。 你可能需要修改 this 实现多边形,再编写一个相交方法,该方法传递一个Line2d对象,并对其进行自定义,使其传递一个数组多边形(可能的原因是相同的线切割可以生成无限多个多边形-假定为之字形多边形)或空。 |
![]() |
5
1
1994年,乔治·瓦内切克(George Vanecek)提出了一个三维的解决方案,并在图形宝石V“平面对多边形的空间划分”中发表了该解决方案。源代码在 Graphic Gems Repository . 最近,DavidGeier发布了一个Vanecek算法的二维实现,并解释了该算法。见 David's Blog: Splitting an arbitrary polygon by a line |
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 7 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 7 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 12 月前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |