2010-06-04 56 views
0

如果這被認爲是一個重複問題,但是我在這裏看到的答案對我的需求來說太複雜了,我們抱歉。確定線段是否與圓形相交的公式(平面)

我只需要找出一個線段相交的圓圈。我不需要找到從圓心到線的距離,我不需要求解相交點。

我需要的東西很簡單的原因是我必須在SQL中編寫代碼並且無法向外部庫發出調用,並且需要在WHERE子句中編寫此公式......基本上它必須在我可以插入值的單個聲明。假設用2個點A(Ax,Ay)和B(Bx,By)來描述線段,以及一個以中心點C(Cx,Cy)和半徑R爲圓心的圓,我當前使用的公式爲:

(R - [R((AX-BX)(AX-BX)+(AY-通過)(AY-通過))) - (((AX-CX)(通過-CY)) - ( (Bx-Cx)(Ay-Cy)))> 0

該公式取自link text,基於0,0中心圓。

我張貼的原因是,我得到奇怪的結果,我不知道如果我做了一件愚蠢的。 :(

回答

0

儘管這並不完全回答你的問題:你是否真的要計算這個上一個SQL-選擇飛這意味着DB-系統計算公式中的每一個單行表(或其中剩餘where條件分別持有,每一行),這可能會導致糟糕的表現。

相反,則可以考慮創建一個單獨的布爾列,在計算上,其值插入/ on-update trigger。反過來,你甚至不需要把測試放在單行公式中。使用單獨的列還有另外一個好處:你可以在該列上創建一個索引讓你可以非常快速地獲得一組相交/非相交記錄。

+0

感謝您的建議,但不幸的是我需要做這種計算爲許多不同的圈子(對幾千線段每一次),所以我不能事先計算出任何東西。 – Dan 2010-06-04 15:03:14

+0

我看,圓形座標不是記錄的一部分(?)您可能想要在您的問題中指定。 – chiccodoro 2010-06-04 15:17:39

+0

這也許值得一提的是我通過檢查過濾掉該計算之前大部分的線條: 1)至少點A之一,B具有至少(一個x值圓心 - 半徑) 2)至少一種點A,B具有至多(圓心+半徑) 3)至少在點A中的一個的x值,B具有至少(y值圓心 - )的點中的至少一個半徑) 4 A,B最多有ay值(圓心+半徑) 如果這些條件沒有全部滿足,那麼整條直線位於通過擴展長度爲2R的圓形中心的正方形形成的十字形之外。 – Dan 2010-06-04 15:35:12