2013-02-25 98 views
1

我有一個由三個給定點組成的圓。我怎麼知道另一個給定的點是否在由前三點形成的圓內。這是我需要計算的決定因素嗎?那麼我需要處理哪些情況?如何知道一個點的位置?

+0

的「替代形式」之一點到圓心的距離不超過它的半徑? – cybye 2013-02-25 07:27:33

+0

檢查此鏈接http://stackoverflow.com/a/839931/67381 – Siddiqui 2013-02-25 07:30:00

+0

已在此處討論: http://stackoverflow.com/questions/481144/equation-for-testing-if-a-point -s-inside-a-circle – chruesel 2013-02-25 07:30:44

回答

3

看來你想知道一個答案,沒有計算圓參數(半徑,中心)。因此,您可以使用the equation for the circumcircle of the triangle(公式2),用給定的點座標替代(x,y)並計算行列式(Det)符號。

重要提示:點x1,x2,x3應按照逆時針順序。否則 - 改變跡象

| x^2+y^2 x y 1 | 
| x1^2+y1^2 x1 y1 1 | = Det 
| x2^2+y2^2 x2 y2 1 | 
| x3^2+y3^2 x3 y3 1 | 

To take mutual orientation of points into account: 
Det = Det * ((x1-x3)*(y2-y3)-(y1-y3)*(x2-x3)) 

If Det = 0 then all four points are concyclic (given point lies at the circle border) 
if Det < 0 then point is inside 
otherwise it is outside the circle 

但我懷疑,這種方法可能需要更多的數學運算,然後半徑和中心點和估計的計算(x-x0)^2+(y-y0)^2 <= R^2

增加: 看來,一般的方法來計算四階行列式在這裏不是很有效:改用第四列的未成年人(Laplace formula here)或WolphramAlpha output

+0

這是一個很好的公式,我不知道! – 2013-02-25 12:18:56

+0

我有專門設計用於計算行列式的類,所以我認爲這對我來說很簡單:)感謝答案,並且在使用此公式時是否有任何例外? – u2425 2013-02-25 18:52:25

+0

我希望沒有例外。 – MBo 2013-02-26 02:11:16

1

如果內圓的半徑小於外圓的半徑,則表示內圓在外圓內(如果需要測試另一個圓是否在外圓內)。

這裏是圓的公式:

x = (Math.cos(angle * Math.PI/180) * radius) + this.centerX; 
y = (Math.sin(angle * Math.PI/180) * radius) + this.centerY; // in radians 

您可以套用這個公式測試一個點是一個圓內。

要測試兩個圓形是否相交,您必須查看它們的中心之間的距離是否在它們的半徑的總和與差值之間。

相關問題