矩形和圓的相交檢測 演算法分析與實現

2021-05-22 08:12:15 字數 621 閱讀 3004

編寫乙個函式

int isonrect(float x, float y, float r,

float x1, float y1, float x2, float y2)

x,y表示乙個圓的圓心,r是圓的半徑

x1,y1,x2,y2表示乙個矩形的一條對角線上的兩個頂點的座標

矩形的四邊均與座標軸平行或者垂直

要判斷這個圓和這個矩形有沒有重合的部分

輸入:按照引數傳遞進行輸入,樣例中一行就是一次輸入

按順序分別對應x,y,d,x1, ....

輸出:使用函式返回值作為輸出,當有重合的時候返回非0,否則請返回0

函式中不得含有任何其它輸出,否則作為錯誤

樣例輸入:

1 1 1  0 0 2 2

1 1 1  2 2 3 3

樣例輸出:10

演算法分析:

分三步:

一:檢測圓的內接正方形和矩形的相交與否

這一步可以檢測出多種相交和包含的情況

如:二:檢測矩形的四個頂點是否在圓中,用頂點跟圓心的距離計算就可以了

三:檢測圓的四個座標軸方向的點與矩形是否相交,四點位置如黑色所示

主要為了檢測這種情況:

**如下:

光線與包圍盒(AABB)的相交檢測演算法

侵刪 這裡介紹兩種演算法,第一種比較容易理解 下面是cocos2dx中實現ray aabb相交 碰撞 檢測的演算法,說明看注釋 cpp view plain copy print bool ray intersects const aabb aabb const 若射線沿y軸方向有分量 判斷是否與包...

邊界檢測演算法分析與實現

1 題目 乙個資料矩陣,選定某個位置的資料元作為參考,尋找與該資料元值相同的連成一片的最大範圍。如下二維陣列中所示,選擇arr 1 3 作為參考物件,從位置 1,3 開始尋找所有相連的值為 1 的元素。結果很明顯如下圖1所示。int arr 5 5 圖1 2 深度遍歷方法 從 1,3 位置開始,按照...

旋轉的矩形與圓的碰撞檢測

在2d平面中,圓與圓檢測是否發生碰撞很簡單,方法即為比較兩個圓心之間的距離與半徑之和。而矩形與圓則需要稍微複雜一點的計算。不旋轉,意思是矩形的邊分別與兩個座標軸平行,矩形長平行於x軸,矩形寬平行於y軸。下面是其碰撞檢測的具體邏輯 參考這篇文章 怎樣判斷平面上乙個矩形和乙個圓形是否有重疊?而對於旋轉的...