首页 > 代码库 > 圆与扇形碰撞检测

圆与扇形碰撞检测

圆与扇形的碰撞检测,以前用过一种算法是这样的:

首先把扇形视作一个圆,排除圆与扇形圆不相交的情况,

然后如果圆心在扇形两条边中间,则必然相交,

剩下的就判断圆是否与两条边相交。

这种算法用到了点与直线的关系,圆与线段的碰撞检测,圆与圆的碰撞检测等,算法清晰,实现起来比较简单,但只能适用于扇形夹角小于180度的情况。


今天偶尔想到了一种新的算法:

首先把扇形视作一个圆,排除圆与扇形圆不相交的情况,然后根据向量夹角判断圆与扇形是否相交。

设向量p1p2为v1, 向量p1p为v2,向量v2从v1方向绕p1点旋转,当转到超过最大角度时,圆与扇形不再相交,所以只要求出该最大角度即可。

作图可知,当圆与扇形边相切时为最大角度,设向量v1与扇形边的夹角为theta,则 theta = asinf(r / len), 最大角度为 theta + radian * 0.5f.

计算出向量v1, v2的夹角,如果 <= 最大角度,则圆与扇形相交。


这个算法理论上要比前一种算法好,并且扇形夹角可以支持0到360度。

圆与扇形碰撞检测实现代码如下:

<script src="https://code.csdn.net/snippets/334999.js" type="text/javascript"></script>

偶然间想到的一种算法,网上并没有找到相关文章,代码可能会有bug,如有发现会第一时间修正。