问题(假设) 如何找到一组瓷砖的轮廓?假设我们有三个瓦片,在x / y坐标A [20,20],B [20,30]和C [30,30](这将形成一个简单的L形)。 这些点代表瓷砖的中心。 每个图块有4个顶点:TL(左上),TR,BL(左下)和BR。 这3个图块共有8个唯一(非重叠)顶点。
我们想要由绿点(顶点)定义的红线(路径): http://img7.imageshack.us/img7/2469/lshapetiles.png
需要的解决方案算法的输出应该是一个形成图块轮廓形状的路径,由这些顶点组成 - 按以下顺序排列: TL,A TR,A BR,C TR,C BR,C BL,B BL,B TL(并且可选,A TL再次关闭)。 见红线。
可能的解决方案 一种选择是遍历所有切片,并为每个切片检查: +上面有邻居吗?如果没有,在TL和TR到路径 +它右边有邻居吗?如果没有,在TR和BR路径 +它下面有一个邻居吗?如果没有,在BL和BR到路径 +左边有邻居吗?如果没有,在TL和BL到路径
如果您仅将已找到的顶点添加到路径中(如果尚未添加它们),则您已成功收集路径的唯一顶点。 但是,它们的顺序可能不正确。这是一个(问题)。
有人知道一个好的解决方案(算法)吗?
答案 0 :(得分:0)
您可以尝试这样的事情:
您迭代地构建一个表示图块的图形,除了一个小的更改 - 当边缘加倍时,您将其删除。
因此,您将第一个图块添加到图形G中,将添加其所有边缘。对于下一个图块,将其所有边缘添加到G,但如果其任何边缘与G中的边缘重叠,则从G中删除该边缘。对所有图块继续此过程。
最后,您将只留下“外侧”边缘,因此您只需穿过您剩下的路径。
答案 1 :(得分:0)
首先,构建一个表示tile结构的数据结构。
算法: 1找到左上角的点。 2从这一点开始,通过使用向上,向右,向下,向左的顺序迭代地找到下一个点(在数据结构中,每个点包含这4个链接) 回到初始点时停3点。
如果图形包含分离的结构,则为每个连接的组件运行上述算法。