多边形剪裁:仅“可见”区域
Posted
技术标签:
【中文标题】多边形剪裁:仅“可见”区域【英文标题】:Polygon Clipping: Only "viewable" area 【发布时间】:2011-11-10 20:26:00 【问题描述】:在下图中,您可以在 (1) 中看到一个三角形和一个圆形。给定那个三角形中的一个专用点 X,我想剪掉从这个点看不到的所有东西。使用(2)中的简单多边形差异算法仅删除圆没有问题。但是我可以使用什么样的算法来获得像(3)中的多边形?
多边形总是简单的。
编辑:圆圈只是一个例子。每个简单的多边形都应该是可能的。
您可以通过查看游戏“突击队 - 敌后”的图像来了解我的需求:
【问题讨论】:
+1,突击队。优秀的游戏。 如果你没有得到答案,你可能会提供赏金。 您的问题似乎与***.com/q/5892539/359538非常相似 @Angus:对我来说这似乎是一个完全不同的问题。只是一个简单的扫描线算法,检查线的交叉点。如果我错了,请纠正我。 @tur1ng 在您的情况下也可以进行简单的循环扫描,但效率会大大降低 【参考方案1】:C平行于D,G平行于A,B平行于F,D为直径。
【讨论】:
对不起,我忘了说圆圈只是一个例子。每个简单的多边形都应该是可能的。 不,无论如何 Simone 的回答都为任何情况提供了更好的解决方案:) 对于任何凸形..如果是凹形的情况,它并不总是完美地工作......但我怀疑如果我们可以将每个凹形细分为凸形,那么问题是也可以解决凹形 正确,here 是凸形的好例子。【参考方案2】:这是基本思想。
我假设一个更一般的问题,但它会更容易适应您的问题:给定一个包含所有形状、一个点和一组几何形状的 plan
,我们想要从计划中删除从该点看不到的区域。
我们想要做的是,对于每个形状,它是starting_polar
和ending_polar
点,即属于该形状的具有最小和最大极角的 2 个点。
现在我们将从plan
中删除形状,并删除由以下点组成的quadrilateral
:starting_polar
、ending_polar
,以及两条直线之间的交点(x, starting_polar)
和@ 987654329@ 和plan
的边界。
在您的情况下,计划将只是triangle
。
【讨论】:
听起来很有希望我会试一试。 它肯定适用于凸形;但我认为,如果一个形状是凹的,你可以把它分成凸的子形状,这仍然可以为形状的所有子形状重复它以上是关于多边形剪裁:仅“可见”区域的主要内容,如果未能解决你的问题,请参考以下文章