碰撞检测算法的引申问题
盒子和盒子的碰撞,或者球和球的碰撞已经有太多的讨论文章, 这里不说
这里只说盒子和球的碰撞
二维情况:
问题描述: 平面任意的矩形和一个圆是否相交的判定
分析:
圆和矩形相交发生情况下,球心在什么区域呢?
区域的形状是个圆角矩形, 如下示意图
绿色为矩形的部分, 当圆的圆心卫浴蓝色和绿色的部分的时候就会相交
因此算法为:
循环矩形的每个边
判定球心到矩形的边的距离(注意距离是有正负的)d
如果d>圆半径r,必然不相交
如果d>0 并且 d< r 记录下这个边号
// 记录下来的边号只有0,1,2三种情况, 0表示圆心位于绿色区域 1表示在上边或者左边 2 表示左上角
如果记录下来的编号小于2, 则必然相交
如果记录下来的编号是2
检测两个记录下来的边的交点(矩形的一个顶点)和圆心距离dd
dd<r 则相交
dd>r不相交
三维情况
问题描述: 空间任意长方体与一个球体的相交,如何判定
分析: 和二维的情况类似, 球心是在一个圆角长方体内才会相交
算法:
判定球心和每个面的情况
记录到面距离小于r又大于0的面
根据面计算处于棱边状况或者顶角的状况
no time, continue。。。。。