Java 在凹凸多边形中查找有界矩形
我正在寻找一种方法,在凹多边形或凸多边形中找到一个轴对齐的矩形 我一直在网上寻找,我能找到的最接近的解决方案只适用于凸多边形,而不是凹多边形。例如— 老实说,我不是一个伟大的数学天才,所以我宁愿找到代码样本或代码库,但我想我可以自己处理一些数学问题,或者找人帮我 如果解决方案也能用Java,那就太好了,但也许我太贪婪了:p 编辑:为了回应罗素的评论,我添加了更多的信息 有界矩形应尽可能大。矩形用于在其中包含文本。最多1到4个单词,支持文本换行。例如,如果它太薄,我会垂直放置文本,而不是水平放置。所以对于纵横比,我想它需要足够容纳1-4个单词,无论是垂直的还是水平的,都需要换行。如果矩形很小,我可以调整文本大小,但最好文本尽可能大 另一个很好的要求是,如果多边形的总体方向是对角线,并且文本在对角线方向时更适合,那么矩形不一定与轴对齐,而是与多边形的对角线对齐。我想这个需求让这件事变得非常棘手,但若你们认为这是可能的,那个就太好了 我想我已经满足了所有的要求PJava 在凹凸多边形中查找有界矩形,java,geometry,computational-geometry,Java,Geometry,Computational Geometry,我正在寻找一种方法,在凹多边形或凸多边形中找到一个轴对齐的矩形 我一直在网上寻找,我能找到的最接近的解决方案只适用于凸多边形,而不是凹多边形。例如— 老实说,我不是一个伟大的数学天才,所以我宁愿找到代码样本或代码库,但我想我可以自己处理一些数学问题,或者找人帮我 如果解决方案也能用Java,那就太好了,但也许我太贪婪了:p 编辑:为了回应罗素的评论,我添加了更多的信息 有界矩形应尽可能大。矩形用于在其中包含文本。最多1到4个单词,支持文本换行。例如,如果它太薄,我会垂直放置文本,而不是水平放置
谢谢 我曾经以一种非常笨拙的方式实现了一个类似的系统,只需在可能的矩形中进行搜索,并在其上使用
Shape.contains()
。它有点慢-也许是1秒的布局在一个椭圆形的盖茨堡地址-但对于静态文本和简单形状的小文本有用
如果您感兴趣,可以解压缩jar文件并查看
TextWrappingLayout
。它可能比你需要的要复杂得多,因为它不是在一个矩形中布局,而是试图将每一行尽可能靠近边缘,但你可以看到基本思想。既然你想对文本这样做,我就假设速度很重要,准确性不那么重要。那么,我建议:
另外,我想指出“删除单元格”实际上,这只意味着在表示网格单元的2D数组中设置一个位。矩形上还有其他约束吗?是否希望它具有最大面积?具有一定的高度或宽度?或者可能具有一定的纵横比?它是否应与至少两个角上的边接触?对于凹多边形,可能有多个不同的位置有没有更好的启发式方法?嗨,罗素,谢谢你的回答!我已经更新了我的问题。谢谢DeepYellow!你的算法看起来足够优雅。不幸的是,我现在没有时间实现它,因为它非常复杂。但我还是把它作为答案。我希望我能尽快实现它n、 这个解决方案是不够的。想想一个几乎接触到自身的凹多边形-从外部填充不会填充空腔。@SudoNhim,我不同意,无论是凹多边形还是凸多边形都一样有效。你认为哪里出了问题?当一个多边形几乎接触到自身时,光栅化版本实际上可以接触到自身,从而防止了s步骤3:移除位于多边形外部的所有单元。这不是一个不切实际的场景,假设您正在尝试标记具有河口的地块。下面是步骤3的一个失败案例:当然,解决方案是使用适当的光栅化算法。例如,感谢Russell!它确实很复杂:)我认为我最好用DeepYellow的方法实现它,尽管这仍然是一个很好的参考!谢谢!