function [center, r] = solve_circle(pt1, pt2, pt3)
%Effect: solve the circle which across points 'pt1', 'pt2' and 'pt3'
%Inputs:
%pt1, pt2, pt3: [x, y]
%center: the circle center [x0; y0]
%r: the radius of the circle
%Author: Su dongcai at 2012/1/2
A = zeros(2, 2); B = zeros(2, 1);
[A(1, :), B(1)] = circle2line(pt1, pt2);
[A(2, :), B(2)] = circle2line(pt2, pt3);
center = A\B;
r = norm(pt1' - center);
function [A, B] = circle2line(pt1, pt2)
%Effect: cast 2 circles equation into 1 linear equation:
%(a-x1)^2 + (b-y1)^2 = r^2 |
% |==> 2(x1-x2)a + 2(y1-y2)b = (x1^2 + y1^2) - (y2^2 + y2^2)
%(a-x2)^2 + (b-y2)^2 = r^2 |
%Inputs:
%pt1, pt2: [x1, y1], [x2, y2]
%Outputs:
%A: 2[x1-x2, y1-y2]
%B: (x1^2 + y1^2) - (x2^2 + y2^2)
%Author: Su dongcai at 2012/1/2
A = 2*(pt1 - pt2);
B = norm(pt1)^2 - norm(pt2)^2;
三点定圆程序(matlab实现)
最新推荐文章于 2021-10-05 16:48:01 发布