首页 > 其他 > 详细

圆与扇形碰撞检测

时间:2014-05-09 01:32:59      阅读:378      评论:0      收藏:0      [点我收藏+]

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

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

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

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

这种算法用到了点与直线的关系,圆与线段的碰撞检测,圆与圆的碰撞检测等,算法清晰,实现起来比较简单,但只能适用于扇形夹角小于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

圆与扇形碰撞检测

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!