Python 是否有一种优雅的方法可以仅从最小点和最大点生成N维棱镜的曲面?

Python 是否有一种优雅的方法可以仅从最小点和最大点生成N维棱镜的曲面?,python,arrays,spatial,surface,cartesian-product,Python,Arrays,Spatial,Surface,Cartesian Product,假设我有一个N维棱镜,由两个点包围:最小点和最大点。在三维中,这将是棱镜上的左下和右上点 从技术上讲,棱柱体的边界是定义棱柱体所需的全部,但我很难推断某些信息 我可以用笛卡尔积得到所有点的列表 但是有没有一种优雅的方法可以从这个起点计算曲面列表呢 例如,以(0,0,0)和(1,1,1)为边界的三维立方体将具有以下曲面: [(0, 0, 0), (0, 1, 0), (0, 1, 1), (0, 0, 1)] [(0, 0, 0), (1, 0, 0), (1, 0, 1), (0, 0, 1)]

假设我有一个N维棱镜,由两个点包围:最小点和最大点。在三维中,这将是棱镜上的左下和右上点

从技术上讲,棱柱体的边界是定义棱柱体所需的全部,但我很难推断某些信息

我可以用笛卡尔积得到所有点的列表

但是有没有一种优雅的方法可以从这个起点计算曲面列表呢

例如,以(0,0,0)和(1,1,1)为边界的三维立方体将具有以下曲面:

[(0, 0, 0), (0, 1, 0), (0, 1, 1), (0, 0, 1)]
[(0, 0, 0), (1, 0, 0), (1, 0, 1), (0, 0, 1)]
[(0, 0, 0), (1, 0, 0), (1, 1, 0), (0, 1, 0)]
[(1, 1, 1), (1, 0, 1), (1, 0, 0), (1, 1, 0)]
[(1, 1, 1), (0, 1, 1), (0, 1, 0), (1, 1, 0)]
[(1, 1, 1), (0, 1, 1), (0, 0, 1), (1, 0, 1)]
值得一提的是,我最终打算以图形方式显示这些曲面。因此,我要处理的问题的一部分是,每个曲面的点应该按照实际定义闭合曲面的顺序排列。因此,表面上:

[(0, 0, 0), (0, 1, 0), (0, 1, 1), (0, 0, 1)]
是有效的,但是

[(0, 0, 0), (0, 1, 0), (0, 0, 1), (0, 1, 1)]
不符合正确的顺序,因为边相互交叉(我想不出一个很好的方法来将点按正确的顺序排列)

我曾经尝试过,但没有想到一种方法来计算一个棱镜的表面列表,而这个棱镜并不是非常凌乱。如果您能提供正确的解决方法,我们将不胜感激


我意识到这是一个奇怪的具体问题。然而,我相信应该有一个很好的方法来解决这个问题,而我似乎找不到它。如何解决这样的问题?

在N维超立方体中(认为这是生成的对象的真实名称),有效边是只有一个坐标在变化的地方。这就是为什么(0,1,0)-(0,0,1)不起作用,而(0,1,0)-(0,1,1)起作用


那部分是肯定的。然而,为超立方体定义超曲面只是一种直觉:我认为它涉及到一个坐标固定,另一个N-1“环绕”。更复杂的是,请参见维基百科:

在N维超立方体中(假设这是您正在生成的对象的真实名称),有效边是仅一个坐标发生变化的位置。这就是为什么(0,1,0)-(0,0,1)不起作用,而(0,1,0)-(0,1,1)起作用


那部分是肯定的。然而,为超立方体定义超曲面只是一种直觉:我认为它涉及到一个坐标固定,另一个N-1“环绕”。更复杂的是,请参见维基百科:

您是否计划将更高的维度可视化,而不是3D?4D超立方体的边实际上是规则的3d立方体(其中8个)。你不能用8个顶点的一条线条来显示三维立方体。你是否打算显示比三维更高的维度?4D超立方体的边实际上是规则的3d立方体(其中8个)。您无法使用包含8个顶点的单个线条来真正可视化三维立方体。