Java 如何将多边形划分为子多边形并为其指定id

Java 如何将多边形划分为子多边形并为其指定id,java,math,hashmap,coordinate-systems,Java,Math,Hashmap,Coordinate Systems,我有一个有坐标的多边形 (1,2) (3,2) (1,1) (3,1) 我想将多边形分成9个部分,并为每个部分指定一个编号 所以我试着 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) 等等。所以我需要一个如下的

我有一个有坐标的多边形

(1,2)
(3,2)
(1,1)
(3,1)
我想将多边形分成9个部分,并为每个部分指定一个编号

所以我试着

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[]>();
HashMap hmap=newhashmap();

非常感谢您的帮助。

我会给您一个开始的提示。你真正想要的是一个聪明或有效的方法来循环通过你的多边形的所有顶点。让我们从简单地查看每个子多边形左上角的位置开始

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

每个次多边形左上角的公式是什么?好的,我们从
(最小x,最大y)
开始。这是亚多边形1的左上角。然后我们将
sw
添加到x值中,以获得亚多边形2的左上角
(最小x+sw,最大y)
。然后亚多边形3的左上角是
(最小x+2*sw,最大y)

然后,我们需要下降高度
sh
,以获得次多边形4的左上角。这是
(最小x,最大y-sh)
。然后我们再从左到右:
(最小x+sw,最大y-sh)
对于亚多边形5,
(最小x+2*sw,最大y-sh)

看到模式了吗?将另一高度的
sh
,再从左向右移动:
(最小x,最大y-2*sh)
(最小x+sw,最大y-2*sh)
(最小x+2*sw,最大y-2*sh)

因此,如果我让我的索引
I
范围从0到8(对应于子多边形1到9),您可以看到左上角子多边形
(I+1)
的一般模式是:

(最小x+(i%3)*开关,最大y-(i/3)*开关)

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


我相信这足以让你开始。我个人更愿意从左下角开始,从左到右,从下到上工作,但我是根据你的编号来做的。您可以找到其他角点的类似公式,稍微思考一下可以帮助您将这些公式推广到不同的分区中(即,查看除以3和模3部分)

您计划如何在
hmap
中映射信息?也只是交叉检查一下,你的多边形现在是一个四边形,需要分成9个部分,对吗?此外,你还需要将零件存储到其坐标图中?当我指定id时,我试图获取次多边形的四个坐标,然后将它们存储到散列图中。是的,我的多边形目前是一个四边形,需要将其划分为9个部分,并需要将零件存储到其坐标图中。