三點確定乙個圓的計算方法

2021-09-02 14:08:26 字數 2274 閱讀 6153

三點確定乙個圓的計算方法

最近在寫的乙個軟體需要根據三個座標點來計算乙個圓。因此花了點時間推導了相關的公式。這個推導不算太難,放在這裡主要是做個備忘。

我們設乙個圓的圓心座標為 (x 0 ,y) (x0,y)(x_0, y),半徑為 r rr。那麼這個圓的方程可以寫為:

(x−x 0 ) 2 +(y−y 0 ) 2 =r 2  (x−x0)2+(y−y0)2=r2

(x - x_0)^2 + (y - y_0)^2 = r^2

在這個圓上隨便取三個點,設這三個點的座標分別是 (x 1 ,y 1 ) (x1,y1)(x_1, y_1),(x 2 ,y 2 ) (x2,y2)(x_2, y_2),(x 3 ,y 3 ) (x3,y3)(x_3, y_3)。那麼有:

⎧ ⎩ ⎨ ⎪ ⎪ (x 1 −x 0 ) 2 +(y 1 −y 0 ) 2 =r 2 (x 2 −x 0 ) 2 +(y 2 −y 0 ) 2 =r 2 (x 3 −x 0 ) 2 +(y 3 −y 0 ) 2 =r 2  (1)(2)(3) 

(x_1 - x_0)^2 + (y_1-y_0)^2 = r^2 & (1)\\

(x_2 - x_0)^2 + (y_2-y_0)^2 = r^2 & (2)\\

(x_3 - x_0)^2 + (y_3-y_0)^2 = r^2 & (3)

\end

公式(1)(2)相減,(1)(3)相減之後經過化簡可以得到:

(x 1 −x 2 )x 0 +(y 1 −y 2 )y 0 =(x 2 1 −x 2 2 )−(y 2 2 −y 2 1 )2 (x 1 −x 3 )x 0 +(y 1 −y 3 )y 0 =(x 2 1 −x 2 3 )−(y 2 3 −y 2 1 )2  (x1−x2)x0+(y1−y2)y0=(x12−x22)−(y22−y12)2(x1−x3)x0+(y1−y3)y0=(x12−x32)−(y32−y12)2

(x_1 - x_2) x_0 + (y_1- y_2) y_0 = \frac\\

(x_1 - x_3) x_0 + (y_1- y_3) y_0 = \frac\\

x 0 ,y 0  x0,y0x_0,y_0有唯一解的條件是係數行列式不為 0 00:

∣ ∣ ∣ (x 1 −x 2 )(x 1 −x 3 ) (y 1 −y 2 )(y 1 −y 3 ) ∣ ∣ ∣ ≠0 |(x1−x2)(y1−y2)(x1−x3)(y1−y3)|≠0

\begin

(x_1 - x_2) & (y_1- y_2) \\

(x_1 - x_3) & (y_1- y_3)

\end \neq 0

簡單變變型也就是:

x 1 −x 2 y 1 −y 2  ≠x 1 −x 3 y 1 −y 3   x1−x2y1−y2≠x1−x3y1−y3

\frac \neq \frac

這樣寫幾何含義就很明顯了,三點不能共線。

設:a=x 1 −x 2 b=y 1 −y 2 c=x 1 −x 3 d=y 1 −y 3 e=(x 2 1 −x 2 2 )−(y 2 2 −y 2 1 )2 f=(x 2 1 −x 2 3 )−(y 2 3 −y 2 1 )2  a=x1−x2b=y1−y2c=x1−x3d=y1−y3e=(x12−x22)−(y22−y12)2f=(x12−x32)−(y32−y12)2a = x_1-x_2\\

b = y_1-y_2\\

c = x_1-x_3\\

d = y_1-y_3\\

e = \frac\\

f = \frac

那麼 :

x 0 =−de−bfbc−ad y 0 =−af−cebc−ad  x0=−de−bfbc−ady0=−af−cebc−ad

x_0 = -\frac\\

y_0 = -\frac

有了 x 0  x0x_0 和 y 0  y0y_0 的值後,帶入(1) 式就可以得到 r rr的值。至此,三點確定圓的問題就解決了。

下面是個 c++ **(用到了qt 的 qpointf 型別):

#include

#include

#include

#include

qpointf tcircle(qpointf pt1, qpointf pt2, qpointf pt3, double &radius)

double x0 = -(d * e - b * f) / det;

double y0 = -(a * f - c * e) / det;

radius = hypot(x1 - x0, y1 - y0);

return qpointf(x0, y0);

}

vtk實現三點確定乙個平面

如何在vtk中根據三點提取乙個切面,一直知道根據三點就能表示乙個面,但是怎麼在vtk中實現,對於我這種菜鳥真是要想好久。首先說說現在的思路,知道vtkimagepalne中可以根據乙個點和乙個面法向量獲得乙個面。現在我有三個點,需要獲得乙個面法向量,那麼需要通過叉乘得到,再然後根據乙個點和得到的面法...

求乙個圓的面積及判斷乙個點是否在圓內

class point point double x,double y void setx double x void sety double y double getx double gety class circle circle point p circle double radius cir...

計算三點所形成的夾角的三種方法

第一種方法,使用向量計算三個點abc ab b.x a.x,b.y a.y ac c.x a.x,c.y a.y cosa ab ac ab ac 這種方法好像很複雜,首先ab ac,ab ac 需要求兩點間的距離 向量夾角余弦公式法具體舉例 比如已知三點m 1,1 a 2,2 b 2,1 求角度 ...