2017-03-07 72 views
2

我与坐标多边形如何将多边形划分为子多边形和分配的ID给他们

(1,2) 
(3,2) 
(1,1) 
(3,1) 

我想多边形分为9个部分,并指定每个部分number.For例子enter image description here

于是,我就喜欢

double width = 3-1=2; 
double height = 2-1=1; 

subpolygon width=2/3=0.667 
subpolygon height=1/3=0.33 

现在,我希望能有子多边形ID和他们的坐标一样

1 -> (1,2),(1.67,2),(1,1.67),(1.67,1.67) 

等等。所以我需要一个如下所示的散列图来存储信息。

HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>(); 

任何帮助表示赞赏。

+1

你打算如何映射'hmap'中的信息?也只是为了交叉检查,你的多边形是现在需要分成9个部分的四边形,对吗?此外,您需要将零件存储到其坐标图中? – nullpointer

+0

当我分配ID我试图得到四个子多边形的坐标,然后存储在哈希map.Yes我的多边形是一个四边形现在需要分成9个部分,需要存储的部分到其坐标图。 – RKR

回答

1

我给你一个提示开始。你真正想要的是一种巧妙或有效的方式来遍历多边形的所有顶点。我们首先看一下每个子多边形左上角的位置。

从您的多边形的左上角开始,我们将首先从左到右循环,然后从上到下循环。假设sw表示您的子宽度,sh表示您的子高度。

那么每个子多边形左上角的公式是什么?那么,我们从(min x, max y)开始。这是子多边形1的左上角。然后我们将sw添加到x值以获取子多边形2的左上角(min x + sw, max y)。然后子多边形3的左上角是(min x + 2 * sw, max y)

然后我们需要降下高度sh以得到子多边形4的左上角。这是(min x, max y - sh)。然后我们再次从左到右:(min x + sw, max y - sh) for subpolygon 5,(min x + 2 * sw, max y - sh)

看到一种模式了吗?下降另一个高度sh,并再次从左到右: (min x, max y - 2 * sh),(min x + sw, max y - 2 * sh)(min x + 2 * sw, max y - 2 * sh)

所以,如果我让我的索引i范围从0到8(将通过9符合您的子多边形1),你可以看到,左上角子多边形(i+1)的一般模式是:

(min x + (i % 3) * sw, max y - (i/3) * sh)

请注意,前面的(i/3)是整数(舍入)除法,例如,对于子多边形8,i = 77/3 = 2

我相信这足以让你开始。我个人本来宁愿从左下角开始,从左到右,从下到上工作,但我根据你的编号进行了分析。您可以在其他角落找到类似的公式,并且一些思考可以帮助您将此公式推广到不同的分区(即查看除以3和模3部分)。