平面图(带嵌入)的实现方案

9
为了本文的目的,所谓的平面图,或者说平面地图,是指一种可以在平面上(或等价地在球面上)绘制的抽象图形,以及每个顶点处边缘的循环顺序,根据特定的绘制方式确定该附加信息决定了嵌入到球体上(移动顶点和边缘的方式使它们永远不会相交其他顶点/边缘)。我确实希望允许循环和多重边缘。
例如,假设我们按照以下方式构建了一个图。在平面上绘制两个顶点(A和B),并用两条边将它们连接起来。这两条边共同形成一个简单的闭曲线γ。现在添加两个顶点A'和B',并将A和A'连接起来,将B和B'也连接起来。
这个抽象图形将有两个不同的嵌入,具体取决于顶点A'和B'是否被曲线γ分开。
我的问题是:是否有一个Python包实现这样的平面图? 我对能够创建平面图的绘图包感兴趣(当然要尊重嵌入),以及执行一些标准操作(例如给出面数,形成双重图等)。
如果在Python中不存在这样的包,我也会对其他语言的实现感兴趣。
当然有各种包实现了绘制图形和图论算法。但是,我没有在这些包中注意到可以使用已经带有嵌入的图形工作的可能性。非常感谢提供参考。
编辑:让我再详细解释一下。如果两个球面上同一图形的嵌入可以通过球面上的一个同胚相互转化,则它们是等价的。如上所述,通常情况下平面图的嵌入不是唯一的,因此我询问的内容与测试图形是否可平面化并绘制其某些嵌入不同。
有几种组合编码方式可以对这种等价性进行编码。最简单的可能是记录每个顶点边缘的循环顺序(“旋转系统”),但还有许多其他方法。请参见Wikipedia上关于图形嵌入的文章以获取讨论和参考资料。
显然,人们可能希望在这种组合嵌入上执行一些操作,例如查找图形的面,查找边缘/顶点相邻的面,插入面中的顶点,细分边缘,绘制嵌入图像等。

是否有Python中实现这些组合图嵌入数据结构的一个或多个?(我注意到图嵌入在一般表面上是有意义的,尽管我主要关心的是球面的情况。)


球面的欧拉特征数为2;这与二维平面的欧拉特征数相同,因此任何将图形嵌入到二维平面上的平面性测试都可以映射到嵌入到球面上。从一个到另一个的简单映射是在平面上的图形周围画一个圆,然后圆心映射到球面上的北极,圆周映射到球面上的南极,您可以在二维平面上使用极坐标直接映射到球面上的纬度/经度。 - MT0
@MT0 我知道在平面和球面上嵌入图形是等价的。这个问题涉及到组合地图的实现(即图形和平面嵌入的等价类)。 - Lasse Rempe
2个回答

2
我刚刚注意到networkx确实包含了一个用于我所描述的目的的类,即PlanarEmbedding。请参见https://networkx.github.io/documentation/latest/reference/algorithms/planarity.html (我不确定这是否是在我提出问题之后引入的,还是当时我错过了它。)
该类附带的方法似乎相当基本,并且仅实现了一种可能的平面嵌入数据结构。我将进一步调查;如果有人知道其他实现,请提供相关信息。

实际上,经过一些研究,我认为这种数据类型仍然不允许多个边缘,因此不适合我的目的。(最终我自己编写了一个特定解决方案。) - Lasse Rempe

0

我不确定我完全理解你的需求,但你有没有看过这个planarity library。它是一个cython封装器,用于实现平面图算法,包括绘图。我已经在使用networkX 中使用它了。


谢谢 - 我已经看了一下这个,因为我(终于)回到了我对此感兴趣的项目。然而,从示例中我所能看出来的是,平面图库并没有包含一个实际编码(组合)嵌入的数据结构。 - Lasse Rempe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接