三点外接圆的半径(面积)计算 Matlab实现
原理介绍
如下图所示,三维空间内,过任意不共线三点可画出一个空间圆,也称作三角形的外接圆。外接圆的半径为 R,三角形的三个顶点为 A、B、C,三角形的 AB 边上的高 CD 垂直于 AB。设三条边的长度分别为 a、b、c,CD 的长度为 h。

根据三角形的底和高,三角形的面积表示如下 :
S = 0.5 * c * h; (1)
其中,高可表示为:
h = b * sinA; (2)
根据正弦定理:
a / sinA = b / sinB = c / sinC = 2R; (3)
于是有:
S = abc/4R;
另外一方面,根据海伦公式:
S=√(p(p-a)(p-b)(p-c));
其中 p = 0.5 * (a + b + c);
两种方法计算的三角形面积相等,这样就可以根据三角形的三边长度计算出外接圆的半径(求出半径也就知道面积),而三个点之间的三边长度是极其容易计算的。
Matlab实现
% function: 根据传入三点坐标计算外接圆半径
% param: 三个点坐标
% rerurn: 外接圆半径(不存在时返回 -1)
function nRadius = calcRadius(P1, P2, P3)
V1 = P2 - P1; % 一条边的向量
na = calcLength(V1); % 该边的长度
V2 = P3 - P1; % 一条边的向量
nb = calcLength(V2); % 该边的长度
V3 = P3 - P2; % 一条边的向量
nc = calcLength(V3); % 该边的长度
np = ( na + nb + nc) * 0.5; % 海伦公式中的 p
pa = np - na;
pb = np - nb;
pc = np - nc
nS2 = np * pa * pb * pc; % 根据海伦公式计算的三角形面积的平方
if (nS2 <= 0)
nRadius = -1; % 两个点重合或三点共线时,nS2 为 0
else
nS = sqrt(nS2);
nRadius = na * nb * nc / ( 4 * nS);
end
end
% function: 计算向量的模长
% param: 向量
% rerurn: 模长
function nLen = calcLength(V)
nLen = sqrt(dot(V,V));
end
使用例子:
%定义三个点的坐标
A = [0 0 0];
B = [0 1 2];
C = [4 5 6];
nR = calcRadius(A, B, C)
输出为 nR = 6.9372