Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 查找网格对齐正方形并集的轮廓_Math_Geometry_Polygon - Fatal编程技术网

Math 查找网格对齐正方形并集的轮廓

Math 查找网格对齐正方形并集的轮廓,math,geometry,polygon,Math,Geometry,Polygon,如何获得使用较小网格块形成的轮廓形状的坐标 例如,如果我使用32x32个单位块来构造一个形状(任意形状)。 那么我如何才能得到形状的整体坐标,包括负空间 例如: 人们可以这样安排街区: (每个块为32x32,坐标系指块的左下角) 现在你可以看到这会在中间产生一个空的空间。 我想知道的是,如何得到上面形状的坐标,这样我就得到: Main Block = (0,0), (96,0), (0,96) Empty space = (32,32), (64,32), (64,64), (32,64) 有

如何获得使用较小网格块形成的轮廓形状的坐标

例如,如果我使用32x32个单位块来构造一个形状(任意形状)。 那么我如何才能得到形状的整体坐标,包括负空间

例如: 人们可以这样安排街区: (每个块为32x32,坐标系指块的左下角)

现在你可以看到这会在中间产生一个空的空间。

我想知道的是,如何得到上面形状的坐标,这样我就得到:

Main Block = (0,0), (96,0), (0,96)
Empty space = (32,32), (64,32), (64,64), (32,64)
有什么数学方法可以解决这个问题吗

最终我会做复杂的形状

谢谢

********编辑**** 嗨

如何处理这种情况

<------------------^<----^
|                  ||    |
V------------------>|    |
<------^          /^|    |
|      |<------^ / ||    |
|      ||      |/  ||    |
V------>V------>V-->V---->
V--->
我希望结果是这样的

<-------------------<----^
|                        |
V      ^----------->     |
|      |          /      |
|      <-------^ /       |
|              |/        |
V------>------->--->----->
-->-->

您可能需要重点关注
布尔多边形操作
,在您的案例中的并集。关于二维布尔多边形运算和构造性平面几何的论文很多,请参见维基百科:。

您可能需要关注
布尔多边形运算
,在您的案例中的并集。关于二维布尔多边形运算和构造性平面几何的论文很多,请参见维基百科:。

将每个正方形视为一个轮廓,由四个逆时针方向的向量组成

<-----^
|     |
|     |
V----->

因此,对于形状中的所有正方形,取其轮廓向量的并集。如果并集中的两个轮廓向量相同但方向相反,则它们会相互抵消并从并集中删除

例如,对于并排的两个正方形,并集是8个向量

<-----^<-----^
|     ||     |
|     ||     |
V----->V----->

<P>6,因为中间的两个垂直向量取消:

<-----<-----^
|           |
|           |
V----->----->

对于您给出的示例,其结果将是(取消后):



您只需将最终简化并集中的向量连接起来,即可读取轮廓路径。请注意,内部轮廓(“孔”)是顺时针运行的。

将每个正方形视为一个由四个矢量组成的轮廓,这些矢量沿逆时针方向排列

<-----^
|     |
|     |
V----->

因此,对于形状中的所有正方形,取其轮廓向量的并集。如果并集中的两个轮廓向量相同但方向相反,则它们会相互抵消并从并集中删除

例如,对于并排的两个正方形,并集是8个向量

<-----^<-----^
|     ||     |
|     ||     |
V----->V----->

<P>6,因为中间的两个垂直向量取消:

<-----<-----^
|           |
|           |
V----->----->

对于您给出的示例,其结果将是(取消后):



您只需将最终简化并集中的向量连接起来,即可读取轮廓路径。请注意,内部轮廓(“孔”)是顺时针方向运行的。

你想看看集合论。你想看看集合论。嗨,听起来很有希望。基本上,我正试图用PHP数组来实现这一点。我还没有为PHP找到一个好的向量类。顺便说一句,你知道如何识别顺时针方向的闭合回路,并将其与逆时针方向的回路分开吗?即使SPAH是奇数形状,这种逻辑也会起作用吗?例如如果第二个形状是矩形(第一个正方形高度的一半)。@ssdesign,您实际上不需要向量类,只需要指示起点和终点,或起点+方向+长度的东西。您可以在StackOverflow中搜索区分顺时针和逆时针的测试。至于奇怪的形状,我想你可以让向量部分地相互抵消——所以1.0up+0.5down=0.5up。嗨,我不是一个数学爱好者。阿塔尔:)我只是在制作web应用程序时必须处理这种情况。那么,有没有可能在几件事上给我更多的提示?我试着顺时针和逆时针搜索StackOverflow,但没有得到任何有用的结果。我错过了什么?我还想知道如何部分取消向量thanks@ssdesign:当最后一个顶点与起始顶点相同时,您知道循环正在闭合。如果两个轮廓没有任何共同点,那么它们是分开的。嗨,听起来很有希望。基本上,我正试图用PHP数组来实现这一点。我还没有为PHP找到一个好的向量类。顺便说一句,你知道如何识别顺时针方向的闭合回路,并将其与逆时针方向的回路分开吗?即使SPAH是奇数形状,这种逻辑也会起作用吗?例如如果第二个形状是矩形(第一个正方形高度的一半)。@ssdesign,您实际上不需要向量类,只需要指示起点和终点,或起点+方向+长度的东西。您可以在StackOverflow中搜索区分顺时针和逆时针的测试。至于奇怪的形状,我想你可以让向量部分地相互抵消——所以1.0up+0.5down=0.5up。嗨,我不是一个数学爱好者。阿塔尔:)我只是在制作web应用程序时必须处理这种情况。那么,有没有可能在几件事上给我更多的提示?我试着顺时针和逆时针搜索StackOverflow,但没有得到任何有用的结果。我错过了什么?我还想知道如何部分取消向量thanks@ssdesign:当最后一个顶点与起始顶点相同时,您知道循环正在闭合。如果两个轮廓没有任何共同的顶点,则它们是分开的。