JavaScript中判断线段平行轴类型并计算正确总距离的问题
JavaScript中判断线段平行轴类型并计算正确总距离的问题
嘿,我明白你现在遇到的问题了!你的点集[[3,3],[3,5],[3,-2]]里所有点的x坐标都是3,所以这些线段其实是平行于Y轴的,但你代码里的判断逻辑搞反了,而且距离计算的方式也不对,导致没得到你想要的结果。咱们一步步来修正:
首先纠正核心问题
- 平行轴的判断逻辑搞反啦:
当相邻两点的x坐标相等时,线段是平行于Y轴的(x不变,y变化,沿着Y轴方向延伸);只有当相邻两点的y坐标相等时,线段才是平行于X轴的(y不变,x变化,沿着X轴方向延伸)。 - 距离计算不能直接相加:
两点之间的距离是坐标差的绝对值,比如平行Y轴的两点(x,y1)和(x,y2),距离应该是Math.abs(y2 - y1),直接相加会因为负坐标出现错误结果。
实现你想要的总距离计算
看你提到想要5+3-2=6的结果,结合你的点集,我猜可能是表述上的小误差?先给你提供两种常见需求的正确实现,你可以根据实际情况调整:
修正后的代码
let points = [ [3, 3], [3, 5], [3, -2] ]; // 先判断所有线段是否统一平行于某一轴 let isParallelToY = true; let isParallelToX = true; for (let i = 0; i < points.length - 1; i++) { if (points[i][0] !== points[i + 1][0]) isParallelToY = false; if (points[i][1] !== points[i + 1][1]) isParallelToX = false; } // 计算各段线段的距离总和 let totalSegmentDistance = 0; // 计算整个点集在轴上的总跨度(最高点到最低点的距离) let totalSpan = 0; if (isParallelToY) { console.log("所有线段平行于Y轴"); // 累加每一段的距离 for (let i = 0; i < points.length - 1; i++) { totalSegmentDistance += Math.abs(points[i + 1][1] - points[i][1]); } // 计算Y轴总跨度:最大值减最小值 const yValues = points.map(p => p[1]); totalSpan = Math.max(...yValues) - Math.min(...yValues); console.log("各段距离总和:", totalSegmentDistance); console.log("Y轴总跨度:", totalSpan); } else if (isParallelToX) { console.log("所有线段平行于X轴"); for (let i = 0; i < points.length - 1; i++) { totalSegmentDistance += Math.abs(points[i + 1][0] - points[i][0]); } const xValues = points.map(p => p[0]); totalSpan = Math.max(...xValues) - Math.min(...xValues); console.log("各段距离总和:", totalSegmentDistance); console.log("X轴总跨度:", totalSpan); } else { console.log("线段不都平行于同一轴"); }
代码说明
- 先遍历点集确认所有线段是否统一平行于Y轴或X轴,避免出现部分线段平行X、部分平行Y的情况
- 对于平行Y轴的场景:
- 各段距离总和:累加每相邻两点y坐标差的绝对值,你的点集计算结果是
2+7=9 - Y轴总跨度:取所有y坐标的最大值减最小值,结果是
5 - (-2)=7
如果确实需要得到6这个结果,可以补充说明你的具体计算逻辑,我再帮你调整~
- 各段距离总和:累加每相邻两点y坐标差的绝对值,你的点集计算结果是
备注:内容来源于stack exchange,提问作者Sougata Mukherjee
相关产品推荐
相关产品推荐

