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

如何重构优化三维坐标方向判断函数

如何重构优化三维坐标方向判断函数

兄弟,我看你现在的findDirection函数重复写了三次几乎一样的逻辑,确实有点冗余,完全可以把单轴的方向判断逻辑提炼成通用函数,这样不仅代码更清爽,以后维护起来也方便。咱们一步步来重构:

第一步:提炼通用的单轴方向判断函数

首先写一个专门针对单个坐标轴的方向判断函数,把x、y、z轴的判断逻辑统一进去,只需要传入要判断的轴名称(比如'x'、'y'、'z')就行:

function getAxisDirection(p1, p2, originalDistance, axis) {
    // 创建p1的副本,避免修改原对象产生副作用
    const tempP1 = {...p1};
    // 临时增加对应轴的数值
    tempP1[axis] += 1;
    // 计算新距离
    const newDistance = calculateDistance(tempP1, p2);
    // 根据距离变化返回方向:新距离更大说明要反向,返回-1;否则返回1
    return newDistance > originalDistance ? -1 : 1;
}

第二步:替换原来的重复逻辑

现在你就可以直接用这个通用函数分别获取三个轴的方向了,再也不用写三次重复代码:

const p1 = { x: 11, y: 12, z: 2 };
const p2 = { x: 15, y: 10, z: 5 };

function calculateDistance(p1, p2) {
    const a = p2.x - p1.x;
    const b = p2.y - p1.y;
    const c = p2.z - p1.z;
    return Math.sqrt(a * a + b * b + c * c);
}

const distance = calculateDistance(p1, p2);

// 直接调用通用函数获取各轴方向
const directionX = getAxisDirection(p1, p2, distance, 'x');
const directionY = getAxisDirection(p1, p2, distance, 'y');
const directionZ = getAxisDirection(p1, p2, distance, 'z');

console.log("directionX: " + directionX);
console.log("directionY: " + directionY);
console.log("directionZ: " + directionZ);

为什么这么重构更好?

  • 减少重复代码:三个轴的判断逻辑只写一次,避免冗余,以后如果要调整判断规则(比如改成加2而不是加1),只需要修改getAxisDirection这一个函数就行。
  • 避免副作用:原代码里直接修改了p1的属性然后又改回去,虽然结果没问题,但如果有其他地方依赖p1的原始值,可能会出问题。这里用对象副本tempP1来计算,不会影响原对象。
  • 可读性更强:函数名getAxisDirection清晰表达了功能,调用的时候一眼就能看懂是在获取哪个轴的方向。

如果你想一次性获取三个轴的方向,还可以再封装一个函数,直接返回包含三个方向的对象:

function getAllAxisDirections(p1, p2, originalDistance) {
    return {
        x: getAxisDirection(p1, p2, originalDistance, 'x'),
        y: getAxisDirection(p1, p2, originalDistance, 'y'),
        z: getAxisDirection(p1, p2, originalDistance, 'z')
    };
}

// 使用方式
const directions = getAllAxisDirections(p1, p2, distance);
console.log("directionX: " + directions.x);
console.log("directionY: " + directions.y);
console.log("directionZ: " + directions.z);

这样代码就更整洁啦!

备注:内容来源于stack exchange,提问作者NewBieJavaPro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:58:04