版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itworld123/article/details/84105921
---------------------------------------------
-- 时间:2018-11-15
-- 创建人:Ruo_Xiao
-- 邮箱:[email protected]
---------------------------------------------
一、基本思想
1、圆心与弦中点组成的向量垂直于弦向量。
2、圆心和三点共面。
二、Matlab
clc;
clear;
%% 三个点
P1 = [1,0,1];
P2 = [0,1,1];
P3 = [0,-1,1];
%% 计算1点和2点的向量,1点和3点的向量
v21 = P2 - P1;
v31 = P3 - P1;
%% 计算1点和2点的中点,1点和3点的中点
P21_Center = (P2 + P1)/2;
P31_Center = (P3 + P1)/2;
%% 计算v21和v31的叉乘,即:面的法线
vN = cross(v21,v31);
%% 罗列三元三次方程组
% (1、2)圆心与弦中点组成的向量垂直于弦向量
% (3)圆心和3点共面
% 变量赋值
x1 = P1(1); y1 = P1(2); z1 = P1(3);
x2 = P2(1); y2 = P2(2); z2 = P2(3);
x3 = P3(1); y3 = P3(2); z3 = P3(3);
a = vN(1); b = vN(2); c = vN(3);
x12_c = P21_Center(1); y12_c = P21_Center(2); z12_c = P21_Center(3);
x13_c = P31_Center(1); y13_c = P31_Center(2); z13_c = P31_Center(3);
% 计算
r1 = x12_c*(x2-x1) + y12_c*(y2-y1) + z12_c*(z2-z1);
r2 = x13_c*(x3-x1) + y13_c*(y3-y1) + z13_c*(z3-z1);
r3 = a*x1 + b*y1 + c*z1;
A = [x2 - x1 , y2 - y1 , z2 - z1;
x3 - x1 , y3 - y1 , z3 - z1;
a , b , c ];
B = [r1 , r2 , r3];
%% 计算圆心
A_Inv = pinv(A);
circlecenter = B*pinv(A)
结果:
circlecenter =
0 0 1
三、C++源码工程
https://download.csdn.net/download/itworld123/10787261
(SAW:Game Over!)