有一段时间了,我一直在尝试编写一个可以计算2点之间距离的函数。我使用这个网站:http://www.mathwarehouse.com/calculators/distance-formula-calculator.php来查找公式,但它不断返回不同的数字。为了正确看待这个,该网站说距离(0,0)和(50,100)的距离是111.80339887498948,我的电脑说是7.483314773547883。我很确定该网站是正确的,但我已经尝试了很多算法,并且不能让它返回与网站相同的东西。这是我的代码:
var distance = function(x1, y1, x2, y2) {
var a = x2 - x1;
a ^= 2;
var b = y2 - y1;
b ^= 2;
var c = a + b;
return Math.sqrt(c);
};
你能告诉我为什么这说错了吗?
答案 0 :(得分:2)
^
是JavaScript中的bitwise XOR运算符,因此^= 2
并未按预期执行。
ES2016中存在exponential operator (**
),但除非您使用的是转发器,否则它可能没有您所追踪的browser compatibility。
一些替代方案:
乘法
var distance = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt(dx*dx + dy*dy);
}
使用Math.pow
var distance = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
}
var distance = function (x1, y1, x2, y2) {
return Math.sqrt(dx**2 + dy**2);
}
答案 1 :(得分:0)
您应该使用Math.pow
来使用指数:
function distance(x1, y1, x2, y2) {
var a = Math.pow(x2 - x1, 2);
var b = Math.pow(y2 - y1, 2);
return Math.sqrt(a + b);
};
console.log(distance(0,0,0,50))