严格相等校验不符合预期:向量共线性判断代码异常
问题分析与解决
你的代码逻辑完全偏离了向量共线性的数学判断标准,这才是导致错误的核心原因——而非你认为的-0问题(实际上在JavaScript中-0 === 0的结果是true)。
原代码的问题
原代码中的判断条件完全不符合共线性的定义:
- 第一个case判断
y1 % x1 === 0 && y2 % x2 === 0,这只是在检查两个向量的y坐标是否是x坐标的整数倍,和向量是否共线无关。比如(1,2)和(1,-2)都满足这个条件,但它们的斜率相反,显然不共线。 - 后面的
x1 + x2 === 0、x1 + y1 === 0等条件也和共线性没有直接关系,属于错误的逻辑判断。
正确的解法
向量共线的充要条件是两个向量的叉乘为0,即x1 * y2 === x2 * y1,这个公式可以覆盖所有情况:
- 零向量与任何向量共线(比如
(0,0)和(1,2),叉乘结果为0) - 非零向量斜率相等(或都垂直于x轴/x轴方向)的情况
修正后的代码:
function collinearity(x1, y1, x2, y2) { return x1 * y2 === x2 * y1; } console.log(collinearity(1, 2, 1, -2)); // 输出 false,符合预期
验证关键案例
- 共线向量:
collinearity(1,2,2,4)→1*4=2*2→ 返回true - 非共线向量:
collinearity(1,2,1,-2)→1*(-2)≠1*2→ 返回false - 零向量情况:
collinearity(0,0,5,3)→0*3=5*0→ 返回true
内容的提问来源于stack exchange,提问作者mastachiii
相关产品推荐
相关产品推荐

