我正在试图绘制一些泥地图.我使用python和graphviz得到类似的东西:
http://img23.imageshack.us/img23/5222/arrasz.png
正如您所看到的,我们有一些位置并且进入N / S / W / E / Up / Down我们将前往其他位置.
用graphviz绘制这张地图是否有可能将北方位置设置为南方,而位于西方位置右侧的东方位置?
我的意思是这样的:
some --- E ---> some
location <--- W --- location 2
.
/ \ |
| |
N S
| |
\ /
`
some location 3
或者也许有一些比graphviz更好的自动绘制工具?
解决方法:
人们之前已经问过improving Graphviz layout,但我认为Graphviz在这里有点过分.
如果您有这样的标准MUD布局:
…那么你对房间的位置有一些相当强烈的限制. Graphviz不知道这些约束,所以它不会像一个简单的算法那样做得好:
>在网格上选择一个起始位置
>使用例如,穿过每个房间. a depth-first traversal
>为每个新房间移动一个单位到N,S,E或W.
如果您不想编写可视化代码,您可以(或许)将上述方法作为Graphviz的预处理步骤,将其用作为每个房间分配排名的方法.然后(希望)Graphviz会产生正确的输出.
编辑:例如,一些伪代码:
visit(initialRoom, 0, 0)
def visit(curRoom, curX, curY)
if curRoom == null return
print "in room " + curRoom + " at location " + curX + ", " + curY
visit(curRoom.northNeighbor, curX, curY-1)
visit(curRoom.southNeighbor, curX, curY+1)
visit(curRoom.westNeighbor, curX-1, curY)
visit(curRoom.eastNeighbor, curX+1, curY)