首先来说明一下核心思想
无非是三种状态:
1、圆心在矩形中
2、圆心在矩形外,但在其某一边的侧面
3、圆心在矩形外、不再某一边的侧面
圆心在矩形中的情况十分好处理,这里就不说了。
下面来说一下2、3情况的核心应对思路:
首先,拿到矩形的四个顶点。
算出圆心到四个顶点分别的距离。
给距离从小到大排一下序。
取其中两个最小距离的点,求出圆心到这两点之间直线(或延长线)上最短距离的那个点。
重点来了:
这时候要看这个点是在两点之间,还是在这条直线的延长线上。如果是之间,就是情况2。再延长线上就是3。
分别做处理,如果是情况2就算出两点距离,看看跟半径的关系判断是否碰撞。
如果是3就算出圆心到距离圆心最近的顶点的距离,看看它和半径的关系。
Lua代码如下:
(注:这个是本人洗澡的时候灵感突现想出的Idea,半夜写的算法。没有单独摘出来方法,将会在以后改进。请关注本人博客或Github: https://github.com/Schrodinger123)
--圆心,半径
local circle = {
x = 0,
y = 0,
r = 5
}
-- 矩形位置,宽高
local box = {
x = 5,
y = 5,
w = 3,