好的,我需要帮助最大化条子对象中可以有许多不同形状的矩形区域。我已经完成了大部分工作。
我正在使用kinect和深度像素在C#中工作。
这张图片只是我能说到的最好的代表。
我需要在x,y平面上的这个区域中生成一个矩形,使区域最大化,同时使每条边都是实心的。
我已经将实体形状表示为x,y平面上的点列表。所以我在2D平面上有形状。有点像这样:
为了简化问题,我只想制作一个边长与x和y线平行的矩形。 我不是在寻找代码。我只需要一些方向或算法,我可以阅读并尝试实施。
如果需要澄清,请告诉我。
答案 0 :(得分:0)
如果您只需要边界矩形,则可以遍历点列表。存储X和Y的最小值和最大值(如minX,minY,maxX,maxY)。浏览整个列表,如果检查每个点,请执行4,如:
if(point.X < minX) minX = point.X
if(point.Y < minY) minY = point.Y
if(point.X > maxX) maxX = point.X
if(point.Y > maxY) maxY = point.Y
这将为您提供边界矩形。最小值和最大值是两个点,根据您的坐标系统,左上角和右下角,您可以轻松地使用它们绘制矩形。
答案 1 :(得分:0)
查看Largest Empty Rectangle problem。这是one article,其中包含计算其解决方案的算法。
更准确地说,这是一个问题,包括搜索给定一组点的不包含任何点的最大区域。在您的情况下,您可以将它应用于描述2D形状边缘的某些点,以及外部的一些点。然后,文章的过程将计算黄色区域中的最大矩形。我确实应用了这样的程序来查找不包含透明像素的图像的最大部分。它运作良好,但有点慢。
该解决方案适用于一组点(即没有线段),但您可以使用近似的形状轻松计算近似解。