我正在寻找一种在凹面或凸面多边形内找到轴对齐矩形的方法。
我一直在寻找网络,我能找到的最接近的解决方案只适合凸多边形,而不是凹多边形。例如 -
Finding an axis-aligned rectangle inside a polygon
老实说,我不是一个很棒的数学家,所以我宁愿找到代码示例或代码库,但我想我可以自己处理一些数学,或者找人来帮助我。
如果解决方案也可以在Java中,那将是非常好的,但也许我太贪心了:P
编辑:为了回应罗素的评论,我正在添加更多信息。
有界矩形应尽可能大。矩形旨在包含其中的文本。最多1到4个字,支持文本换行。因此,如果它太薄,我会将文本垂直放置而不是水平放置。所以对于宽高比,我想它需要足够包含1-4个单词垂直或水平与自动换行。如果矩形很小,我可以调整文本大小,但最好是文本尽可能大。
另一个很好的要求是,如果多边形的一般方向是对角线,并且当对角线方向对齐时文本会更好,那么矩形不一定与轴对齐,而是与多边形的对角线对齐。我想这个要求让这个变得非常棘手,但是如果你们认为它有可能那么它会很棒!
我想我现在已经涵盖了所有要求。 :P
谢谢!
答案 0 :(得分:1)
我曾经通过对可能的矩形进行搜索并在其上使用Shape.contains()
来实现类似的系统。这有点慢 - 可能是一个椭圆形的Gettsburg地址布局 - 但对于静态文本和简单形状的小文本很有用。
如果您有兴趣,可以解压缩jar文件here并查看TextWrappingLayout
。它可能比你需要的要复杂得多,因为它不是在一个矩形中布置,而是试图将每条线尽可能靠近边缘放置,但你可以看到基本的想法。
答案 1 :(得分:1)
由于你想为文本做这件事,我会假设速度很重要,准确性不那么重要。我建议这样做:
另见Puzzle: Find largest rectangle (maximal rectangle problem)。
编辑:我刚刚注意到如果多边形以一定角度定向,则此算法会调整此请求。我的建议是找到多边形的principle axes来检查方向,旋转它以使主轴与x轴对齐,并应用上面的算法。另外,我想注意“删除单元格”实际上只是意味着在表示网格单元的2D数组中设置一个位。