如何将多边形划分为子多边形并为其分配 id
How to divide a polygon into sub polygons and assign id to them
我有一个带坐标的多边形
(1,2)
(3,2)
(1,1)
(3,1)
我想将多边形分成 9 部分,并为每个部分分配一个 number.For 示例
所以我尝试了
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)
等等on.So我需要一个像下面这样的哈希映射来存储信息。
HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>();
感谢任何帮助。
我会给你一个开始的提示。您真正想要的是一种巧妙或有效的方式来遍历多边形的所有顶点。让我们从简单地看一下每个子多边形左上角的位置开始。
从多边形的左上角开始,我们将首先从左到右循环,然后从上到下循环。让 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)
。然后我们再次从左到右:子多边形 5 (min x + sw, max y - sh)
,(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(这将对应于您的子多边形 1 到 9),您可以看到左上角子多边形的一般模式 (i+1)
是:
(min x + (i % 3) * sw, max y - (i / 3) * sh)
.
注意前面的(i / 3)
是整数除法(向下舍入),例如对于子多边形 8,i = 7
和 7 / 3 = 2
.
我相信这足以让您入门。我个人更喜欢从左下角开始,从左到右,从下到上,但我是根据你的编号来的。您可以为其他角找到类似的公式,稍微思考一下可以帮助您将此公式概括为不同的分区(即查看除以 3 和取模 3 的部分)。
我有一个带坐标的多边形
(1,2)
(3,2)
(1,1)
(3,1)
我想将多边形分成 9 部分,并为每个部分分配一个 number.For 示例
所以我尝试了
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)
等等on.So我需要一个像下面这样的哈希映射来存储信息。
HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>();
感谢任何帮助。
我会给你一个开始的提示。您真正想要的是一种巧妙或有效的方式来遍历多边形的所有顶点。让我们从简单地看一下每个子多边形左上角的位置开始。
从多边形的左上角开始,我们将首先从左到右循环,然后从上到下循环。让 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)
。然后我们再次从左到右:子多边形 5 (min x + sw, max y - sh)
,(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(这将对应于您的子多边形 1 到 9),您可以看到左上角子多边形的一般模式 (i+1)
是:
(min x + (i % 3) * sw, max y - (i / 3) * sh)
.
注意前面的(i / 3)
是整数除法(向下舍入),例如对于子多边形 8,i = 7
和 7 / 3 = 2
.
我相信这足以让您入门。我个人更喜欢从左下角开始,从左到右,从下到上,但我是根据你的编号来的。您可以为其他角找到类似的公式,稍微思考一下可以帮助您将此公式概括为不同的分区(即查看除以 3 和取模 3 的部分)。