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

如何用JS通过距离函数结合二分查找定位3D秘密点?

3D秘密点定位问题的正确实现方案

已实现的欧氏距离计算函数

你提供的距离计算函数逻辑正确,可直接使用:

const secretPoint = [12, 45, 99];

export default function getDistance(manualPoint) {
  if (manualPoint.length !== 3) {
    console.error("Wrong manualPoint!");
  }
  let sum = 0;
  for (let i = 0; i < manualPoint.length; i++) {
    const difference = secretPoint[i] - manualPoint[i];
    sum += Math.pow(difference, 2);
  }
  const result = Math.sqrt(sum);
  return result;
}

原二分查找的错误分析

你的单维度二分查找逻辑存在核心问题:通过比较left和right位置的距离调整边界,无法正确追踪距离的最小值点(即秘密点坐标)。固定另外两个维度时,距离随当前维度坐标的变化是开口向上的抛物线,最小值恰好对应秘密点坐标,原逻辑的比较方式无法收敛到这个最小值位置。

正确的单维度二分查找实现

针对单个维度(如Z轴),正确逻辑是比较中间位置mid和mid+1的距离,通过距离变化方向判断最小值所在区间:

  • 如果mid处的距离大于mid+1处的距离,说明秘密点坐标在mid+1到right之间,将左边界移至mid+1
  • 反之,秘密点坐标在left到mid之间,将右边界移至mid

重复此过程直到left === right,此时的left就是目标维度的坐标:

// fixedPoint:另外两个维度的固定值,比如找Z轴时传入[x, y, 0](初始x,y可设为0)
// dim:要查找的维度索引(0=X,1=Y,2=Z)
function findSingleDimension(fixedPoint, dim) {
  let left = 0;
  let right = 100;
  while (left < right) {
    const mid = Math.floor((left + right) / 2);
    // 构造mid和mid+1对应的测试点
    const pointMid = [...fixedPoint];
    pointMid[dim] = mid;
    const pointMid1 = [...fixedPoint];
    pointMid1[dim] = mid + 1;
    
    const distMid = getDistance(pointMid);
    const distMid1 = getDistance(pointMid1);
    
    if (distMid > distMid1) {
      left = mid + 1;
    } else {
      right = mid;
    }
  }
  return left;
}

三维秘密点的完整查找实现

对X、Y、Z三个维度依次调用上述函数,每次用已找到的维度值固定另外两个维度,确保调用次数最少:

function findSecretPoint() {
  // 1. 查找X轴,固定Y、Z为0
  const x = findSingleDimension([0, 0, 0], 0);
  // 2. 查找Y轴,固定X为已找到值,Z为0
  const y = findSingleDimension([x, 0, 0], 1);
  // 3. 查找Z轴,固定X、Y为已找到值
  const z = findSingleDimension([x, y, 0], 2);
  
  return [x, y, z];
}

// 测试
console.log(findSecretPoint()); // 针对[12,45,99]或[12,45,28]都能输出正确结果

调用次数说明

每个维度的可能值为0-100(共101个),二分查找的时间复杂度为O(log₂101)≈7次调用/维度,三个维度总共最多21次调用,完全符合“最少调用次数”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:21:12