P1=[0.4,0.6,0.4]; P2=[0.48,0.63,0.52]; P3=[0.85,0.3,0.3]; P=[P1;P2;P3]; % | x1 y1 z1 | %P =| x2 y2 z2 | % | x3 y3 z3 | P=rand(3); % 三点的xyz坐标正好是合拼成3x3的矩阵,这里用3x3的随机矩阵测试 % 利用随机数生成3个点的坐标 % 实际使用中,将已知的三点坐标按上述顺序排成P矩阵既可以了 A=diff(P); % 差分和近似导数 n=cross(A(1,:),A(2,:)); % n是三点组成的平面的法向量 由两的向量求法向向量 if all(n==0),error('not a triangle'); end % 如果n是0向量,表示三点共线 A=[A;n]; % 从三点坐标很容易求得三点平面所在的方程 B=sum(diff(P.^2),2)/2; % 而外接圆心到各点距离相等,又可以列几条方程 B=[B;dot(n,P(1,:))]; % 将方程联立可以解得圆心坐标cc % C = dot(A,B) C = A(1)*B(1) + A(2)*B(2) + A(3)*B(3) % 每一列相乘相加 cc=(A\B)'; % 这里有个复杂的推导过程, % 最终结果cc(1) cc(2) cc(3)就是圆心的x,y,z坐标 r=sqrt(sum((cc-P(1,:)).^2)); % 点cc到任意一点的距离都可以求出圆的半径; C1=P(1,:)-cc;