码迷,mamicode.com
首页 > 其他好文 > 详细

圆与扇形碰撞检测

时间:2014-05-09 01:33:18      阅读:618      评论:0      收藏:0      [点我收藏+]

标签:2d碰撞检测   算法   

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

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

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

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

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


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

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

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

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

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

bubuko.com,布布扣

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

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


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

圆与扇形碰撞检测,布布扣,bubuko.com

圆与扇形碰撞检测

标签:2d碰撞检测   算法   

原文地址:http://blog.csdn.net/zaffix/article/details/25339837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!