空間三點求解圓心座標
阿新 • • 發佈:2018-11-16
---------------------------------------------
-- 時間: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!)