javascript - 圆 Angular 内的圆形物体边界检测

标签 javascript canvas

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

最佳答案

假设你的大圆由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;
}

关于javascript - 圆 Angular 内的圆形物体边界检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19861825/

相关文章:

javascript - html canvas - 绘制带动画和数字的圆圈

javascript - 那里有任何 Node.js 问题跟踪器吗?

javascript - 当我将鼠标悬停在 div 上时,我想调用多个悬停效果

javascript - box2d 力(applyimpulse 和 applyforce)

javascript - 旋转放置在 Canvas 中的 2 个 Canvas 对象之一

java - JSF+Facebook 集成应用程序的设置不允许一个或多个给定的 URL。它必须与网站 URL 或 Canvas URL 匹配

javascript - 如何在 HTML5 Canvas 中临时更改圆圈颜色

javascript - 如何使用 Javascript 将 HTML/CSS 转换为 PDF?

javascript - 使用 JSON.stringify 将对象转换为字符串 显示空对象

javascript - 决定 HTTP header 的字符集。我应该简单地输入 utf-8 和 fuggedaboutit 吗?