距离函数返回错误的东西

时间:2017-08-01 13:39:30

标签: javascript distance

有一段时间了,我一直在尝试编写一个可以计算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);
};

你能告诉我为什么这说错了吗?

2 个答案:

答案 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));
}

使用exponential operator

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))