You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

可视化项目中程序化查找立方体/超立方体面的算法求助

超立方体面的程序化生成算法

正在开展立方体/超立方体可视化项目,需获取程序化查找立方体/超立方体面的方法。要求n=3和n=4时,每个面为4个连通顶点(示例:face[0] = [0, 1, 3, 2]),n=3对应6个面,n=4对应48个面。请问是否存在查找n维立方体面的算法?


现有顶点生成代码

JavaScript 代码

function generateVertices() {
  const numDimensions = parseInt(document.getElementById('numDimensions').value);
  const numVertices = Math.pow(2, numDimensions);
  const vertices = [];

  for (let i = 0; i < numVertices; i++) {
    const vertex = [];

    for (let j = 0; j < numDimensions; j++) {
      const coord = (i & (1 << j)) === 0 ? 1 : -1;
      vertex.push(coord);
    }

    vertices.push(vertex);
  }

  console.clear();

  console.log(`Number of vertices: ${vertices.length}`);

  for (let i = 0; i < vertices.length; i++) {
    console.log(`[${vertices[i].join(', ')}]`);
  }
}

HTML 代码

<label for="numDimensions">Number of dimensions:</label>
<input type="number" id="numDimensions" value="3">
<button onclick="generateVertices()">Generate Vertices</button>

核心算法思路

要生成符合要求的4顶点连通面(即2维正方形面),可基于顶点的二进制编码规则推导:

  1. 顶点编码规则:顶点编号i的二进制每一位对应一个维度的坐标——第j位为0时,该维度坐标为1;为1时坐标为-1。比如编号0(二进制000)对应(1,1,1),编号1(二进制001)对应(-1,1,1)。

  2. 面的生成逻辑:

    • 一个2维面由两个固定的维度(记为a和b,a < b),以及剩余n-2个维度的固定坐标值共同确定。
    • 这两个维度的二进制组合00、01、11、10对应四个连通顶点,按此顺序排列即可得到符合要求的面(如示例中的[0,1,3,2])。
    • 若需要n=4时的48个面,只需将每个基础面的顶点顺序反转(如[2,3,1,0]),即可得到双倍数量的面。
  3. 数量验证:

    • n=3时:维度对数量为C(3,2)=3,每个维度对对应2^(3-2)=2种固定维度组合,总面数3*2=6,符合要求。
    • n=4时:维度对数量为C(4,2)=6,每个维度对对应2^(4-2)=4种固定维度组合,基础面数为6*4=24;添加反转面后总面数为24*2=48,匹配需求。

面生成实现代码

在现有代码基础上,添加面生成函数并更新HTML:

新增JavaScript函数

function generateFaces() {
  const numDimensions = parseInt(document.getElementById('numDimensions').value);
  const faces = [];

  // 遍历所有维度对 (a, b),a < b
  for (let a = 0; a < numDimensions; a++) {
    for (let b = a + 1; b < numDimensions; b++) {
      // 遍历剩余n-2个维度的所有固定组合
      const fixedBitsCount = numDimensions - 2;
      const numFixedCombinations = Math.pow(2, fixedBitsCount);

      for (let f = 0; f < numFixedCombinations; f++) {
        // 构建基础顶点编号的掩码
        let baseMask = 0;
        let bitPos = 0;
        for (let d = 0; d < numDimensions; d++) {
          if (d !== a && d !== b) {
            // 将f的第bitPos位映射到维度d的位置
            if (f & (1 << bitPos)) {
              baseMask |= (1 << d);
            }
            bitPos++;
          }
        }

        // 生成四个连通顶点的编号
        const v0 = baseMask; // 维度a和b都是0
        const v1 = baseMask | (1 << a); // 维度a是1,b是0
        const v2 = baseMask | (1 << b); // 维度a是0,b是1
        const v3 = baseMask | (1 << a) | (1 << b); // 维度a和b都是1
        // 添加基础面
        faces.push([v0, v1, v3, v2]);
        // 添加反转面(用于n=4时得到48个面)
        faces.push([v2, v3, v1, v0]);
      }
    }
  }

  console.clear();
  console.log(`Number of faces: ${faces.length}`);
  for (let i = 0; i < faces.length; i++) {
    console.log(`face[${i}] = [${faces[i].join(', ')}]`);
  }
}

更新后的HTML代码

<label for="numDimensions">Number of dimensions:</label>
<input type="number" id="numDimensions" value="3">
<button onclick="generateVertices()">Generate Vertices</button>
<button onclick="generateFaces()">Generate Faces</button>

内容的提问来源于stack exchange,提问作者Lars-Lasse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:23:13