枚举任意维度的六面体单元顶点和面
正如您所建议的,二进制表示有效,因为二进制数与数字可以被认为是表示顶点坐标的向量维超立方体。现在请注意,可以通过平均两个(相邻)顶点的坐标来获得边缘中点的坐标,并且可以通过平均两个边缘中点的坐标来获得人脸中点的坐标。
这建议使用三元(以 3 为底)系统,每个数字等于 0、1 或 2。考虑一个超立方体,其体积是区间的张量积. 那么顶点的坐标都是-digit 三进制数,每个数字等于 0 或 2。边缘中点坐标都是-digit 三进制数,一位等于 1,其余位等于 0 或 2。人脸中点坐标都是-digit 三进制数,其中两位等于 1,其余数字等于 0 或 2。这以明显的方式扩展到面的更高维类似物。
例如,立方体的顶点() 是
(0,0,0)
(0,0,2)
(0,2,0)
(2,0,0)
(0,2,2)
(2,0,2)
(2,2,0)
(2,2,2)
边缘是_
(0,0,1)
(2,0,1)
(0,2,1)
(2,2,1)
(0,1,0)
(2,1,0)
(0,1,2)
(2,1,2)
(1,0,0)
(1,0,2)
(1,2,2)
(1,2,0)
脸是_
(1,1,0)
(1,1,2)
(1,0,1)
(1,2,1)
(0,1,1)
(2,1,1)
考虑这些坐标甚至给出了一种简单的方法来确定- 一张脸维超立方体。这些对应所有-digit 三进制数位数等于 1,其余位数等于 0 或 2,因此有。
我没有解决的两件事是:
订购;格雷码的巧妙之处在于列表中相邻的顶点在空间上是相邻的。我认为您可以通过我描述的表示使用类似于 Gray 的方法来实现这一点,但问题没有具体提到排序,所以我并不担心。
如何编码。这更像是一个编程问题,应该不会太难。
除了标记所有边缘和面之外,我还发现在相同的上下文中还有其他重要的问题:
以某种特定方式对它们进行编号。deal.II 使用编号,我们首先考虑所有平行于 x 轴的边,并按它们的 y、z 值(0 或 1)按字典顺序对它们进行排序,然后是所有平行于 y 轴的边和按 x、z 值等对它们进行编号。
至于总数:在1d中,有ne_1=1条边。在 2d 中,正方形是通过在 y=0 和 y=1 处复制 1d 线两次形成的,形成两条线,但是我们还必须连接旧线和复制线的所有 nv_1=2 顶点,所以 ne_2=2* ne_1+nv_1=2+2=4。然后通过复制两个正方形并连接所有顶点来构造立方体,因此ne_3=2*ne_2+nv_2=2*4+4=12。你得到递归。