【发布时间】:2011-06-22 06:40:39
【问题描述】:
这可能是一个更注重数学的问题,但想在这里问是因为它是在 CS 环境中。我正在寻找在另一个(任意)四边形内内接一个矩形,内接四边形具有最大的高度和宽度。因为我认为算法会很相似,所以我想看看我是否也可以用圆圈来做到这一点。
为了更清楚地听到我所说的边界四边形作为例子的意思。
以下是我试图实现的 2 个铭文最大化示例:
我做了一些初步的搜索,但没有找到任何确定的东西。似乎某种形式的动态编程可能是解决方案。看来这应该是一个线性优化问题,应该比我发现的更常见,也许我在搜索错误的术语。
注意:对于内接正方形,假设我们知道我们正在寻找的目标 w/h 比(例如 4:3)。对于四边形,假设边不会交叉并且是凹形的(如果这样可以简化计算)。
【问题讨论】:
-
回复。圆圈:您可以将四边形视为截断三角形。 IE。对于四边形的每条边,使相邻边更长,直到它们相遇。在你的新三角形上画一个圆圈。检查它是否适合您的原始四边形。这样得到的最大圆应该是最优的。显然,您需要分别处理具有平行边的四边形。
-
如果您允许凸四边形和线段重叠的四边形,您可能很难处理任意四边形。你的意思是任意的凸四边形吗?
-
矩形也可以旋转,还是必须与“水平”平行?
-
内接的矩形不能旋转,这应该使它更容易一些。两侧不应重叠。我想我可以说外部四边形也将是凸的。我可以看到凹四边形如何使事情变得更加困难。
-
对于圆,有四个角平分线(四边形的每个顶点一个)。相邻的角平分线可以以四种方式配对,从而形成四个可能的圆心。选择通向最大圆圈的中心。对于给定纵横比的内接矩形,我相信这个问题可以简化为一个简单的线性规划问题。
标签: algorithm optimization graphics bounding-box linear-programming