Google maps 计算谷歌地图上多边形内部适合多少特定大小的形状

Google maps 计算谷歌地图上多边形内部适合多少特定大小的形状,google-maps,math,geometry,shape,Google Maps,Math,Geometry,Shape,我想让用户在谷歌地图上画一个多边形形状-这不是一个问题,有这个排序。 当用户单击一个按钮时,我需要计算出在这个多边形中可以容纳多少个特定大小的矩形 我的问题是,如果多边形是6米x 4米,需要拟合的形状是2米x 3米,那么您只能拟合3个形状(如果形状并排,则面积总计为6米x 3米),并留下6米x 1米的剩余面积 其余区域与形状相同,但大小不正确 我如何看到多边形中有多少“整体”形状 我会上传一张图片来说明我的意思 这实际上是一个难题,一个完整解决方案的特殊情况会变得非常复杂,可能是NP难的 导出次

我想让用户在谷歌地图上画一个多边形形状-这不是一个问题,有这个排序。 当用户单击一个按钮时,我需要计算出在这个多边形中可以容纳多少个特定大小的矩形

我的问题是,如果多边形是6米x 4米,需要拟合的形状是2米x 3米,那么您只能拟合3个形状(如果形状并排,则面积总计为6米x 3米),并留下6米x 1米的剩余面积

其余区域与形状相同,但大小不正确

我如何看到多边形中有多少“整体”形状

我会上传一张图片来说明我的意思
这实际上是一个难题,一个完整解决方案的特殊情况会变得非常复杂,可能是NP难的

导出次优解应该相当容易。我们可以考虑两种可能的解决方案,矩形或水平的矩形,在统一的网格中。 让大矩形的大小为
A
X
B
,小矩形的大小为
A
X
B
。对于非旋转版本,我们可以水平安装
m=地板(A/A)
,垂直安装
n=地板(B/B)
,总共安装
n*m
项目。旋转90º,我们有
p=地板(A/b)
q=地板(b/A)
,共有
p*q

有一些上面没有给出最佳解决方案,比如将2X3矩形拟合成5 X 4。如果两个是水平的,一个是垂直的,那么你可以装3个


对于不规则多边形边界,可以将它们排列成行,每行之间的距离等于较小矩形的高度

伪代码解决方案的工作原理如下

poly = getPolygon() // get the input polygon
a = rectangle.height // size of rectangle we are trying to fit
b = rectangle.width  // size of rectangle
row_height = 10
bounds = poly.getBoundingBox()
offset_top = a/2 // y coord of the first row

// loop from top to bottom
for(y = bounds.top + offset_top ; y < bounds.bottom; y += a )
{
    // find all the solutions of the polygon with a horizontal line
    sols1 = poly.intersectWithHorizontalLine(y)

    // find sols of bottom line
    sols2 = poly.intersectWithHorizontalLine(y+a)

    // find the left most and right most points
    left = min(sols1,sols2) 
    right = max(sols1,sols2)

    // now can draw the rectangles
    for(x=left; x < right; x += b)
    {
        drawRectangle( x , y, width=b, height=a)
    }
}
poly=getPolygon()//获取输入多边形
a=rectangle.height//我们试图拟合的矩形的大小
b=矩形。宽度//矩形的大小
行高=10
bounds=poly.getBoundingBox()
偏移量=第一行的a/2//y坐标
//自上而下循环
对于(y=bounds.top+offset_top;y
这实际上是一个困难的问题,完整解决方案的特定情况会变得非常复杂,可能是NP难问题

导出次优解应该相当容易。我们可以考虑两种可能的解决方案,矩形或水平的矩形,在统一的网格中。 让大矩形的大小为
A
X
B
,小矩形的大小为
A
X
B
。对于非旋转版本,我们可以水平安装
m=地板(A/A)
,垂直安装
n=地板(B/B)
,总共安装
n*m
项目。旋转90º,我们有
p=地板(A/b)
q=地板(b/A)
,共有
p*q

有一些上面没有给出最佳解决方案,比如将2X3矩形拟合成5 X 4。如果两个是水平的,一个是垂直的,那么你可以装3个


对于不规则多边形边界,可以将它们排列成行,每行之间的距离等于较小矩形的高度

伪代码解决方案的工作原理如下

poly = getPolygon() // get the input polygon
a = rectangle.height // size of rectangle we are trying to fit
b = rectangle.width  // size of rectangle
row_height = 10
bounds = poly.getBoundingBox()
offset_top = a/2 // y coord of the first row

// loop from top to bottom
for(y = bounds.top + offset_top ; y < bounds.bottom; y += a )
{
    // find all the solutions of the polygon with a horizontal line
    sols1 = poly.intersectWithHorizontalLine(y)

    // find sols of bottom line
    sols2 = poly.intersectWithHorizontalLine(y+a)

    // find the left most and right most points
    left = min(sols1,sols2) 
    right = max(sols1,sols2)

    // now can draw the rectangles
    for(x=left; x < right; x += b)
    {
        drawRectangle( x , y, width=b, height=a)
    }
}
poly=getPolygon()//获取输入多边形
a=rectangle.height//我们试图拟合的矩形的大小
b=矩形。宽度//矩形的大小
行高=10
bounds=poly.getBoundingBox()
偏移量=第一行的a/2//y坐标
//自上而下循环
对于(y=bounds.top+offset_top;y
图像似乎有误。我认为绿色的形状应该是2 X 3。所有的形状都是长方形吗?你可以旋转它们吗?对不起,是的,绿色的形状应该是2 x 3。是的,如果需要的话,形状可以旋转。图像似乎是错误的。我认为绿色的形状应该是2 X 3。所有的形状都是长方形吗?你可以旋转它们吗?很抱歉,是的,绿色的形状应该是2 x 3。是的,如果需要,形状可以旋转。如果我可以使用不旋转的解决方案,我很高兴不旋转它们。我将简单地提供两个结果——一个是纵向的对象,另一个是旋转到横向的对象。非常感谢您的宝贵帮助我如何将相同的解决方案应用于具有4条以上边的多边形,没有边的长度相同,没有角度相同?基本上,用户将绘制一个边数不确定、角度不确定的多边形,我们也不知道该多边形是否有任何平行边。我为一般情况添加了一个轮廓解决方案。如果我可以使用不旋转它们的解决方案,我很高兴不旋转对象。我将简单地提供两个结果——一个是纵向的对象,另一个是旋转到横向的对象。非常感谢您的宝贵帮助我如何申请t