简体   繁体   中英

Circle collision in JavaScript

For school I need to make a program in JavaScript that says if circles had a collision.

It doesn't need to be shown graphically.

I gave it a try, but my code doesn't seem to work. How can I fix it?

Here's the code I produced:

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

Your check should be if (a > Math.sqrt((x*x) + (y*y))) http://cgp.wikidot.com/circle-to-circle-collision-detection

So the complete code is

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


and for a less computational implementation ( using ES7 syntax for the snippet ) use

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

as Darek Rossman shows in his answer .

In your if statement, try this instead:

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

The length of a triangle having sides dx and dy (ie the distance between points (x1, y1) and (x2, y2) where dx = x2 - x1 and dy = y2 - y1 ) is equal to:

sqrt(dx^2 + dy^2)

So you probably want:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM