0

我在 Javascript html5 画布中创建了一个圆圈,在那个圆圈内我创建了一个小圆圈,我用箭头键四处移动,有人可以帮我解决如何检测小圆圈何时接触大圆圈吗?我对这些东西很陌生。

4

2 回答 2

3

假设你的大圆用 bigX、bigY、bigR 描述,小圆用 smX、smY、smR 描述,你需要大圆的中心和小圆的中心之间的距离最多是大半径减去小半径半径:

function isIn(bigX, bigY, bigR, smX, smY, smR) {
  var distSquared = (bigX - smX) * (bigX - smX) + (bigY - smY) * (bigY - smY);
  return (bigR - smR) * (bigR - smR) >= distSquared;
}

X, Y -> 圆心坐标

R -> 圆的半径

PS:我没有提取平方根,因为乘法通常要快得多。

编辑:显然,如果你想检查它们是否接触,那么距离必须相等,不大于:

function isTouching(bigX, bigY, bigR, smX, smY, smR) {
  var distSquared = (bigX - smX) * (bigX - smX) + (bigY - smY) * (bigY - smY);
  return (bigR - smR) * (bigR - smR) == distSquared;
}

EDIT2:与 Ken - Abdias 的评论一致:

浮点比较可能会意外失败,因此最好使用具有容差的比较函数而不是 == 运算符:

function almostEqual (a, b, tolerance) {
  tolerance = tolerance != null ? tolerance : 0.000001;
  return Math.abs(a-b) <= tolerance;
}
于 2013-11-08T14:52:00.903 回答
0

做数学!我不知道是否有一个很好的代码方法可以为你做到这一点,但如果你有大(x1,y1)和小(x2,y2)圆的中心坐标,以及半径小圆圈,你可以比较距离

sqrt((x1-x2)^2 + (y1 - y2)^2) + (small radius) 

到大半径,如果上面的表达式大于或等于大半径,他们正在接触:)

于 2013-11-08T14:55:06.393 回答