1. 程式人生 > >空間三點求解圓心座標

空間三點求解圓心座標

---------------------------------------------
-- 時間: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!)