问题描述
外接圆问题也可以叫做3点确定一个圆,是求一个三角形的三个顶点所外接的一个圆。该问题也可以推广到三位维求解,要确定一个球体的话就需要四个顶点。 该问题和内切圆/球问题通常放在一起讨论。本文先对外接圆问题进行讨论。
已知条件
v 0 , v 1 , v 2 v_0,v_1,v_2 v0,v1,v2为三角形的三个顶点,我们需要求得外接圆的圆心坐标C,和半径r。
求解
分析:三点确定一个圆,那么这三个点到圆心点距离相同,可得下式,整理可求解 C,r。该求解方式可应用于三维内切球体求解,但需要注意4个外接顶点
Code
clc;
close all;
clear;
rng default;
d = rand(3,2);
p1 = d(1,:);
p2 = d(2,:);
p3 = d(3,:);
[c, r] = calCircle(p1, p2, p3);
showGraph(p1, p2, p3, c, r);
function [c, r] = calCircle(p1, p2, p3)
v1 = p2 - p1;
v2 = p3 - p1;
A = [v1; v2];
B = 0.5*[norm(v1)^2; norm(v2)^2];
x = A\B;
c = p1 + x';
r = norm(c-p1);
end
function showGraph(p1, p2, p3, c, r)
t = linspace(0,2*pi,100);
x = c + [r*sin(t'), r*cos(t')];
figure;
p = [p1;p2;p3];
scatter(p(:,1), p(:,2));
hold on
plot(x(:,1), x(:,2));
hold on
scatter(c(1), c(2))
end