我有一个相当光滑的多边形,比如一个带有凸起和凹痕转换为多边形直线的椭圆。我希望用尽可能少的矩形填充这个多边形,但是要保持多边形中小角落的精度。矩形可以是任何大小,任何数量。
这样做的原因是在多边形的网页上进行了点击测试。唯一可行的方法是用div填充它并对所有div进行测试。
当然,任何矩形都会有一个最小的方形尺寸,以免我们只是近似多边形并用像素大小的矩形重新创建它。
答案 0 :(得分:0)
在一般情况下,如果您想要完全表示带有矩形的数字形状,则至少需要与轮廓形成角上的像素一样多的矩形。如果您想到45°的数字直边,则表示每个像素有一个矩形。这是一个严重的限制。 (甚至不要考虑非数字形状。)
这就是说,你接受用一定的误差来近似形状,我建议你先用一个常数因子缩小形状,直到你:你将在形状上叠加一个网格,决定每个瓷砖是否属于形状与否。这样做,你可以在“大像素”的二进制图像中转换你的形状,现在的挑战是用矩形分解这个图像(恰好这一次)。
我建议采用一种简单的贪婪策略,以便您尝试找到一个完全适合的大矩形,然后重复使用剩下的部分。
如果对具有越来越大的矩形结构元素应用morphological erosion操作,您将找到形状图像中拟合的最大矩形。从理论上讲,你应该尝试宽度和高度的所有组合,并保持最大的面积或周长;这是一项大量的工作。我建议先尝试增长的方块,当你发现最大的方块继续朝着允许的方向前进时。
找到一个大矩形后,将其从形状图像中删除,然后重新开始,直到完全删除它为止。