計算機與數學 —— 檢測圓與矩形相交的快速判定演算法
阿新 • • 發佈:2018-12-31
這篇部落格介紹瞭如何快速檢測圓與矩形是否相交的演算法。
演算法介紹
首先,對於矩形來說,將座標系原點移到矩形的中心,並且將從原點到第一象限的頂點的向量
其次,無論圓心
接下來是最關鍵的一步:算出
- 兩個分量都大於0
x 值小於0
y 值小於0
因此最終只要比較半徑
- 若
c<r ,則圓與矩形相交。 - 若
c=r ,則圓與矩形相切。 - 否則二者相離。
程式碼實現
bool Intersection(float2 c, float2 h, float2 p, float r)
{
float2 v = abs(p - c);
float2 u = max(v - h, 0);
return dot(u, u) < r * r;
}
思考
這種演算法可以擴充套件至高維。例如需要判定Box與球形是否相交,則可以依次演算法類推至三維的判定。
這類問題通常都可以轉化為閔可夫斯基和的問題,傳送門。