2011-11-30 119 views
3

你好,我需要为学校制作一个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); 
+2

你不缺少这里的公式什么? –

+0

你可以改变你的return语句只是'return(a>(x * x)+(y * y));'而不是使用if来返回true或false,因为这就是条件已经是。或者更好的做法是将条件存储在一个名为'var isCollision =(a>(x * x)+(y * y));'和'return isCollision'的变量中;'这样做更易于阅读。不要重复使用像碰撞这样的变量名称来处理两件事情。 – CaffGeek

+0

重读距离论坛。你几乎已经知道了,但是还有一部分缺失。 –

回答

1

您的支票应该是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); 
alert(collision); 
0

有边dxdy(即点(x1, y1)(x2, y2)其中dx = x2 - x1dy = y2 - y1之间的距离)的三角形的长度等于:

sqrt(dx^2 + dy^2) 

所以,你可能想:

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

在你的if语句,尝试此相反:

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