Python 绘制泥图

Python 绘制泥图,python,graph,visualization,graphviz,mud,Python,Graph,Visualization,Graphviz,Mud,我在画一些泥的地图。我使用python和graphviz获得了如下结果: 正如你所看到的,我们有一些位置,正在N/S/W/E/Up/Down,我们将前往其他位置 有没有可能用graphviz将此地图绘制成从北到南,从东到西的位置 我的意思是: some --- E ---> some location <--- W --- location 2 .

我在画一些泥的地图。我使用python和graphviz获得了如下结果:

正如你所看到的,我们有一些位置,正在N/S/W/E/Up/Down,我们将前往其他位置

有没有可能用graphviz将此地图绘制成从北到南,从东到西的位置

我的意思是:

some        --- E --->   some
location   <--- W ---    location 2
                            .
                           / \   |
                            |    |

                            N    S

                            |    |
                                \ /   
                                 `
                          some location 3
some--E--->some
位置可用于强制每个节点的垂直水平。这将确保事情按正确的顺序由北向南发展。您必须对泥图进行预处理以确定排名。将一组节点标记为“相同”级别。您将处理泥图,并确定哪一组房间节点位于南北方向的同一标高上。例如:

R1    R2
|     |
R3 -- R4--R5  
对于此地图,您可以有如下内容:

digraph M {
    R1->R3;
    R2->R4;
    R3->R1;
    R3->R4;
    R4->R2;
    R4->R5;
    {rank=same;R1;R2}
    {rank=same;R3;R4;R5}
 }
我无法找到一种方法来强制横向排序。这意味着东/西可能仍然无法正确排列。一旦你有了排名设置,它可能会在90%的时间内工作,因为其他房间将帮助你提供上下文。

我认为子图(见第23页)和排名属性(见第17页)可能是更好地组织图表的方法

以下可能是Graphviz的替代方案:

  • 提供了一些新版本,甚至在应用程序中支持python作为脚本语言

  • 生成漂亮的3D图形,可以通过python进行控制

以前有人问过,但我认为Graphviz在这方面做得太过火了

如果您有这样的标准泥浆布局:

digraph M {
    R1->R3;
    R2->R4;
    R3->R1;
    R3->R4;
    R4->R2;
    R4->R5;
    {rank=same;R1;R2}
    {rank=same;R3;R4;R5}
 }

…然后,您对房间的位置有一些相当强的限制。Graphviz不知道这些约束,因此它不会像以下简单算法那样有效:

  • 在网格上拾取起始位置
  • 使用例如一个
  • 为每个新房间将一个单元移动到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)
    

    非常感谢。这会有帮助的。但如果有人知道不需要分析所有地图就知道哪些等级相同的方法,我仍然感兴趣。我认为不可能在所有情况下都生成正确且可读的地图,因为N/s和E/W轴在MUD中并不是真正强制执行的。例如,您可以有一个从“某个位置”到“某个位置3”的E/W连接,这意味着(对于一个天真的实现来说)“它们处于相同的高度(在N/S轴上),而事实上,它们之间存在另一条路径,在N/S轴上正好走一步,这意味着它们处于不同的高度。