2017-08-01 62 views
1

有一段時間了,我一直在試着編寫一個函數來計算兩點之間的距離。我用這個網站: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

^是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); 
} 
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))