Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在html5画布中检测半圆碰撞?_Javascript_Html_Collision Detection - Fatal编程技术网

Javascript 如何在html5画布中检测半圆碰撞?

Javascript 如何在html5画布中检测半圆碰撞?,javascript,html,collision-detection,Javascript,Html,Collision Detection,我正在写两个圆圈的碰撞检测。但我真正想要的是,主对象只会在其表面的一半与其他对象碰撞,如下图所示: 半圆形表面将从不同方向与其他圆碰撞。我应该如何编写函数来模拟它 我目前发现的两个圆圈检测结果如下: var dx = circle1.x - circle2.x; var dy = circle1.y - circle2.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < circle1.radius + circ

我正在写两个圆圈的碰撞检测。但我真正想要的是,主对象只会在其表面的一半与其他对象碰撞,如下图所示:

半圆形表面将从不同方向与其他圆碰撞。我应该如何编写函数来模拟它

我目前发现的两个圆圈检测结果如下:

var dx = circle1.x - circle2.x;
var dy = circle1.y - circle2.y;
var distance = Math.sqrt(dx * dx + dy * dy);

if (distance < circle1.radius + circle2.radius) {
    // collision detected!
}
var dx=circle1.x-circle2.x;
var dy=circle1.y-circle2.y;
变量距离=数学sqrt(dx*dx+dy*dy);
if(距离<圆圈1.半径+圆圈2.半径){
//检测到碰撞!
}

但是只有一半的主要圈子参与进来怎么样?那么,只有一小部分圆曲面参与碰撞呢?假设只有Math.PI/2度的圆将检测碰撞?

假设检测碰撞的代码是正确的(我没有测试它),您所要做的就是确定哪个圆更靠近右侧,以知道哪个圆将碰撞

假设图像中的半圆是圆1

if (distance < circle1.radius + circle2.radius) {
    // collision detected!
    if(circle1.x < circle2.x){
        // Circle collided on the right side of the other circle,
        // which means it's a real collision..
    }
}
if(距离
那个半圆能旋转吗?如果没有,那么就很容易了:碰撞只发生在右侧,这意味着你只需要检查
半圆\圆心.x \位置
半圆\圆心.x \位置+半圆.半径

是的,它在各个方向上移动。请注意,我们没有检测到平面零件的碰撞。然后更难-我能弄清楚的是,您确定两个边缘点(在当前情况下是
centerX,centerY+-radius
,但在不垂直线的情况下会变得很棘手),并使用旋转角度定义形状。然后,您可以确定随机X,Y点是否在半圆内。但是碰撞通常是一项艰巨的任务,因此,如果您希望增加简单形状以外的复杂性,我建议您寻找相关的库。例如,PhaserJS拥有强大的物理引擎。