第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

圓-矩形碰撞檢測(相交)

圓-矩形碰撞檢測(相交)

圓-矩形碰撞檢測(相交)如何判斷二維歐幾里德空間中的圓與矩形是否相交?(即經(jīng)典的二維幾何)
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊

當(dāng)圓與矩形相交時,只有兩種情況:

  • 要么圓心位于矩形內(nèi),要么
  • 矩形的一個邊在圓中有一個點。

請注意,這并不要求矩形是軸平行的。

https://img1.sycdn.imooc.com//5d09a0fc00011ad111490775.jpg

(一種觀察方法是:如果圓中沒有一個點(如果所有的邊都“在”圓之外),那么圓仍然可以與多邊形相交的唯一方法是它完全位于多邊形內(nèi)。)

有了這個洞察力,下面這樣的東西就能工作了,在那里圓圈有中心。P半徑R,而矩形具有頂點。ABCD按照這個順序(不完整的代碼):

def intersect(Circle(P, R), Rectangle(A, B, C, D)):
    S = Circle(P, R)
    return (pointInRectangle(P, Rectangle(A, B, C, D)) or
            intersectCircle(S, (A, B)) or
            intersectCircle(S, (B, C)) or
            intersectCircle(S, (C, D)) or
            intersectCircle(S, (D, A)))

如果您正在編寫任何幾何學(xué),您可能已經(jīng)在您的庫中具有上述功能。否則,pointInRectangle()可以通過多種方式實現(xiàn);多邊形點方法可以工作,但對于矩形,只需檢查此方法是否有效:

0 ≤ AP·AB ≤ AB·AB and 0 ≤ AP·AD ≤ AD·AD

intersectCircle()也很容易實現(xiàn):一種方法是檢查垂直于P到行足夠近,并且在端點之間,否則檢查終結(jié)點。

最酷的是IDEA不僅適用于矩形,而且適用于圓與任意一個圓的交點。簡單多邊形-甚至不一定是凸的!


查看完整回答
反對 回復(fù) 2019-06-19
?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊

我會這樣做:

bool intersects(CircleType circle, RectType rect)
{
    circleDistance.x = abs(circle.x - rect.x);
    circleDistance.y = abs(circle.y - rect.y);

    if (circleDistance.x > (rect.width/2 + circle.r)) { return false; }
    if (circleDistance.y > (rect.height/2 + circle.r)) { return false; }

    if (circleDistance.x <= (rect.width/2)) { return true; } 
    if (circleDistance.y <= (rect.height/2)) { return true; }

    cornerDistance_sq = (circleDistance.x - rect.width/2)^2 +
                         (circleDistance.y - rect.height/2)^2;

    return (cornerDistance_sq <= (circle.r^2));
}

下面是它的工作原理:

https://img1.sycdn.imooc.com//5d09a10a0001353603300353.jpg

  1. 第一對直線計算圓心和矩形中心之間x和y差值的絕對值。這會將四個象限折疊成一個,這樣計算就不必再做四次了。這張圖顯示了圓心現(xiàn)在必須放置的區(qū)域。注意,只顯示了一個象限。矩形是灰色區(qū)域,紅色邊框勾勒出與矩形邊緣正好有一個半徑的臨界區(qū)域。圓的中心必須在這個紅色的邊界內(nèi),才能發(fā)生交點。

  2. 第二對線消除了簡單的情況,即圓離矩形足夠遠(yuǎn)(在任一方向),不可能相交。這與圖像中的綠色區(qū)域相對應(yīng)。

  3. 第三對線處理簡單的情況,即圓足夠接近矩形(在任一方向),以保證一個交點。這對應(yīng)于圖像中的橙色和灰色部分。注意,這個步驟必須在步驟2之后完成,這樣邏輯才有意義。

  4. 其余的線計算出圓圈可能與矩形角相交的困難情況。若要求解,請計算從圓心到拐角的距離,然后驗證距離不大于圓的半徑。此計算對中心位于紅色陰影區(qū)域內(nèi)的所有圓返回false,對于中心位于白陰影區(qū)域內(nèi)的所有圓返回true。


查看完整回答
反對 回復(fù) 2019-06-19
  • 3 回答
  • 0 關(guān)注
  • 1815 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號