通過點擬合圓

2021-10-08 02:20:15 字數 2324 閱讀 3518

參考**: matlab空間三點求圓心

**中使用的演算法原理是:三個點確定兩個線段,圓心位於兩個線段的中垂線上,所以圓心座標符合兩個中垂線的性質,具體推導如下(我的推導過程和原文中的稍有區別,我算出d,原文算出k,思路一致):

****部落格: matlab空間三點求圓心

function p = circlecenter(p1, p2, p3)

% circlecenter(p1, p2, p3) 根據三個空間點,計算出其圓心

% p1,p2,p3:三個空間點

% 圓的法向量

pf= cross(p1-p2, p1-p3)

;if any(pf == 0)

error(

'三個點不能共線!!');

end% 兩條線段的重點,之後需要求中垂線

p12 =

(p1 + p2)/2;

p23 =

(p2 + p3)/2;

% 求兩條線的中垂線

p12f = cross(pf, p1-p2)

; p23f = cross(pf, p2-p3)

; % 求在中垂線上投影的大小

ds =

((p12(2)-p23(2))*p12f(1) - (p12(1)-p23(1))*p12f(2)

) / ( p23f(2)*p12f(1) - p12f(2)*p23f(1));

% 得出距離

p = p23 + p23f .* ds;

end

在空間中,我們有時候需要多個點去擬合乙個最佳的圓。

**部落格 最小二乘法擬合圓

原部落格附加**:

/**

* 最小二乘法擬合圓

* 擬合出的圓以圓心座標和半徑的形式表示

* 此**改編自 newsmth.net 的 jingxing 在 graphics 版貼出的**。

* 版權歸 jingxing, 我僅僅是搬運工外加一些簡單的改動工作。

*/typedef complex point;

bool circleleastfit(const std::vector

&points, double ¢er_x, double ¢er_y, double &radius)

double sum_x = 0.0f, sum_y = 0.0f;

double sum_x2 = 0.0f, sum_y2 = 0.0f;

double sum_x3 = 0.0f, sum_y3 = 0.0f;

double sum_xy = 0.0f, sum_x1y2 = 0.0f, sum_x2y1 = 0.0f;

int n = points.size();

for(int i = 0; i < n; i++)

double c, d, e, g, h;

double a, b, c;

c = n * sum_x2 - sum_x * sum_x;

d = n * sum_xy - sum_x * sum_y;

e = n * sum_x3 + n * sum_x1y2 - (sum_x2 + sum_y2) * sum_x;

g = n * sum_y2 - sum_y * sum_y;

h = n * sum_x2y1 + n * sum_y3 - (sum_x2 + sum_y2) * sum_y;

a =(h * d - e * g) / (c * g - d * d)

; b =

(h * c - e * d) / (d * d - g * c)

; c = -(a * sum_x + b * sum_y + sum_x2 + sum_y2) / n;

center_x = a / (-2)

; center_y = b / (-2)

; radius = sqrt(a * a + b * b - 4 * c) / 2;

return

true

;}

作者給出的效果圖:

C N點求圓 擬合法

n點求圓簡單 但是在點位資料採集時候往往存在各種各樣的誤差,致使計算結果誤差較大。所以寫了乙個3點擬合乙個新點。形成內外圓擬合均分法求出圓心及座標 資料點採集如下圖 綠色圓為真圓 紅色圓為擬合計算圓 點位為採集點 已知圓心和半徑 根據採集點求擬合圓心和半徑 點位擬合 擬合點 public stati...

空間圓的擬合

通過擬合球面與擬合平面交匯成圓 先擬合出平面,再在平面裡作平面圓的擬合 x c x r u x cos theta v x sin theta y c y r u y cos theta v y sin theta z c z r u z cos theta v z sin theta end ri...

python 擬合圓 最小二乘法擬合圓 轉

有一系列的資料點 我們知道這些資料點近似的落在乙個圓上,根據這些資料估計這個圓的引數就是乙個很有意義的問題。今天就來講講如何來做圓的擬合。圓擬合的方法有很多種,最小二乘法屬於比較簡單的一種。今天就先將這種。我們知道圓方程可以寫為 x xc 2 y yc 2 r2 x xc 2 y yc 2 r2 通...