空间三点求解圆心坐标

版权声明:本文为博主原创文章,未经博主允许不得转载。 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!)

猜你喜欢

转载自blog.csdn.net/itworld123/article/details/84105921
今日推荐