簡體   English   中英

JavaScript 中的圓碰撞

[英]Circle collision in JavaScript

對於學校,我需要用 JavaScript 編寫一個程序,說明圓圈是否發生碰撞。

它不需要以圖形方式顯示。

我試了一下,但我的代碼似乎不起作用。 我該如何解決?

這是我生成的代碼:

function collision (p1x, p1y, r1, p2x, p2y, r2) {
    var a;
    var x;
    var y;

    a = r1 + r2;
    x = p1x - p2x;
    y = p1y - p2y;

    if (a > (x*x) + (y*y)) {
        return true;
    } else {
        return false;
    }
}
var collision = collision(5, 500, 10, 1000, 1500, 1500);
alert(collision);

你的檢查應該是if (a > Math.sqrt((x*x) + (y*y))) http://cgp.wikidot.com/circle-to-circle-collision-detection

所以完整的代碼是

 function collision(p1x, p1y, r1, p2x, p2y, r2) { var a; var x; var y; a = r1 + r2; x = p1x - p2x; y = p1y - p2y; if (a > Math.sqrt((x * x) + (y * y))) { return true; } else { return false; } } var collision = collision(5, 500, 10, 1000, 1500, 1500); console.log(collision);


對於計算量較少的實現(對代碼段使用 ES7 語法)使用

 const checkCollision = (p1x, p1y, r1, p2x, p2y, r2) => ((r1 + r2) ** 2 > (p1x - p2x) ** 2 + (p1y - p2y) ** 2) var collision = checkCollision(5, 500, 10, 1000, 1500, 1500); console.log(collision);

正如 Darek Rossman 在他的回答中所示

在你的if語句中,試試這個:

if ( a * a > (x * x + y * y) ) {
    ...
} else {
    ...
}

邊為dxdy的三角形的長度(即點(x1, y1)(x2, y2)之間的距離(x2, y2)其中dx = x2 - x1dy = y2 - y1 )等於:

sqrt(dx^2 + dy^2)

所以你可能想要:

if(a > Math.sqrt(x*x + y*y)) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM