检查圆与圆扇形的周长之间是否存在碰撞

时间:2018-10-25 12:34:08

标签: javascript html5 canvas

我正在尝试创建一个函数来检查圆与圆扇形的周长之间是否存在碰撞/相交。

我将详细解释我的问题:
1.我有一个由圆心(x1,y1),半径(r1)和角度(m)定义的圆弧,告诉我圆弧的起点和终点。
2.另一方面,我有一个由中心点(x2,y2),半径(r2)定义的圆。
3.我正在用HTML5画布创建一个小游戏,其中两个几何形状都可以自由移动。
4.问题是我想知道这两个(绿色圆圈部分和绿色圆圈)是否相互碰撞。

enter image description here

我当前的代码非常基础(因为我无法提出可以有效检查冲突的内容)。它仅检查定义该圆扇形的圆与另一个圆之间的碰撞:

this.crashWith = function(otherobj) {
    // "this" is the circle
    // "otherobj" is the circle sector
    var dx = this.x - otherobj.x;
    var dy = this.y - otherobj.y;
    var distance = Math.sqrt(dx * dx + dy * dy);
    var crash = false;
    if (distance < this.radius +otherobj.radius) {
        crash = true;
    }
    return crash;
}

注:圆扇形(绿色)具有线宽(如图中所示),并且角度m发生变化(因为圆扇形围绕中心旋转)。

我认为正确的解决方案是知道圆扇形不变(只是旋转)而可以计算碰撞的东西。

1 个答案:

答案 0 :(得分:0)

看起来您对几何学有清晰的了解...
您已经在使用毕达哥拉斯确定圆是否发生碰撞。

要检测正面碰撞,您需要在情况中包括角度,请参见下图:

enter image description here

当角度c大于a且小于b时,您会遇到碰撞。

接下来将要弄清侧面碰撞

相关问题