首页 > 代码库 > 圆与扇形碰撞检测
圆与扇形碰撞检测
圆与扇形的碰撞检测,以前用过一种算法是这样的:
首先把扇形视作一个圆,排除圆与扇形圆不相交的情况,
然后如果圆心在扇形两条边中间,则必然相交,
剩下的就判断圆是否与两条边相交。
这种算法用到了点与直线的关系,圆与线段的碰撞检测,圆与圆的碰撞检测等,算法清晰,实现起来比较简单,但只能适用于扇形夹角小于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,如有发现会第一时间修正。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。