找到网格对齐方块的联合的轮廓

时间:2010-08-17 10:15:13

标签: math geometry polygon

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

例如,如果我使用32x32单位块来构造形状(任何形状)。 然后,我如何获得形状的整体坐标,包括负空间。

例如: 可以像这样排列块: (每个块为32x32,坐标指向块的左下角)

Block 1 - (0,0)
BLock 2 - (32,0)
Block 3 - 64,0)
Block 4 - (64,32)
Block 5 - (64, 64)
BLock 6 - (32, 64)
BLock 6 - (0 64)
Block 7 - (0, 32)

现在你可以看到这会在中间创建一个空白区域。

所以我想知道的是,如何获得上述形状的坐标,以便得到:

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------>------->--->----->

2 个答案:

答案 0 :(得分:2)

在您的案例中,您可能需要关注Boolean Polygon Operations工会。有很多论文涉及2D布尔多边形操作和构造性平面几何,请参阅维基百科:http://en.wikipedia.org/wiki/Boolean_operations_on_polygons

答案 1 :(得分:2)

将每个方块视为由逆时针链中的四个向量组成的轮廓。

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

因此,对于形状中的所有方块,请使用其轮廓向量的并集。如果联合中的两个轮廓向量相同但向相反方向移动,则它们相互抵消并从联合中移除。

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

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

减少到6个向量,因为中间的两个垂直向量取消:

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

对于您提供的示例,结果将是(取消后):

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

您只需将最终缩小的联合中的向量连接起来就可以读取轮廓路径。请注意,内轮廓(“孔”)顺时针运行。