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

如何在JavaScript中获取两个Vector3间的所有整数位置列表?

解决Vector3包围空间内整数坐标立方体的获取问题

你的代码核心问题是默认p2坐标始终大于p1,且循环逻辑完全依赖p2的正坐标值,完全没处理坐标为负或者p2某轴坐标小于p1的情况(比如示例里的z轴,p2.z=1 < p1.z=3)。

正确实现思路

要覆盖所有正负坐标、任意p1/p2位置的情况,核心是先确定包围盒的真实范围:

  • 对x/y/z三个轴分别计算最小值和最大值(不管p1和p2谁大谁小)
  • 遍历每个轴上从最小整数到最大整数的所有值,组合成坐标点

修正后的代码

// 示例输入
const p1 = new Vector3(-1, -1, 3);
const p2 = new Vector3(3, 3, 1);
const result = [];

// 计算包围盒各轴的最小/最大值
const minX = Math.min(p1.x, p2.x);
const maxX = Math.max(p1.x, p2.x);
const minY = Math.min(p1.y, p2.y);
const maxY = Math.max(p1.y, p2.y);
const minZ = Math.min(p1.z, p2.z);
const maxZ = Math.max(p1.z, p2.z);

// 遍历所有整数坐标点
for (let x = Math.floor(minX); x <= Math.floor(maxX); x++) {
  for (let y = Math.floor(minY); y <= Math.floor(maxY); y++) {
    for (let z = Math.floor(minZ); z <= Math.floor(maxZ); z++) {
      result.push(new Vector3(x, y, z));
    }
  }
}

代码说明

  1. 确定包围范围:用Math.min和Math.max拿到每个轴的真实边界,彻底摆脱p1/p2的位置限制
  2. 整数遍历:用Math.floor确保取到边界内的整数(如果输入坐标是小数,比如p1.x=-1.2,若你需要仅包含在包围盒内的整数点,可以改成Math.ceil(minX)到Math.floor(maxX),根据实际需求调整)
  3. 循环逻辑:直接遍历每个轴的整数范围,确保不会遗漏或多生成无关坐标点

针对你的示例

修正后的代码会生成x从-1到3、y从-1到3、z从1到3的所有整数坐标,总共75个点,完全覆盖两个点包围的空间。

内容的提问来源于stack exchange,提问作者iHouqLF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:30:51