Math 查找网格对齐正方形并集的轮廓
如何获得使用较小网格块形成的轮廓形状的坐标 例如,如果我使用32x32个单位块来构造一个形状(任意形状)。 那么我如何才能得到形状的整体坐标,包括负空间 例如: 人们可以这样安排街区: (每个块为32x32,坐标系指块的左下角)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) 有
现在你可以看到这会在中间产生一个空的空间。
我想知道的是,如何得到上面形状的坐标,这样我就得到: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:当最后一个顶点与起始顶点相同时,您知道循环正在闭合。如果两个轮廓没有任何共同的顶点,则它们是分开的。