(一)已知三点求平面法向量
参考:https://www.cnblogs.com/charlee44/p/10744158.html 参考:https://blog.csdn.net/sinat_41104353/article/details/84963016
空间已知三点的位置p1(x1,y1,z1), p2(x2,y2,z2), p3(x3,y3,z3), 令它们逆时针在空间摆放。这样就可以得到平面的两个向量p1p2(x2-x1,y2-y1,z2-z1),p1p3(x3-x1,y3-y1,z3-z1),而平面法线总是和这两个向量垂直。也就是说,p1p2与p1p3的向量积就是平面的法向量n。
向量积
已知向量: a=(a1,a2,a3) b=(b1,b2,b3) 其向量积可表示为: a×b=(a2b3-a3b2,a3b1-a1b3,a1b2-a2b1) 对于一个空间的平面而言,其法向量可以是两个方向,可以向上也可以向下。 中默认规定的也是右手法则,右手除拇指之外的四指根据点的逆时针握住,大拇指的方向即为法线方向。
%% 求Data.P{1}、Data.P{2}、Data.P{3}三点的法向量ansr.n
ansr.n(:,1) = (Data.P{2}(:,2)-Data.P{1}(:,2)).*(Data.P{3}(:,3)-Data.P{1}(:,3))-(Data.P{3}(:,2)-Data.P{1}(:,2)).*(Data.P{2}(:,3)-Data.P{1}(:,3));
ansr.n(:,2) = (Data.P{2}(:,3)-Data.P{1}(:,3)).*(Data.P{3}(:,1)-Data.P{1}(:,1))-(Data.P{3}(:,3)-Data.P{1}(:,3)).*(Data.P{2}(:,1)-Data.P{1}(:,1));
ansr.n(:,3) = (Data.P{2}(:,1)-Data.P{1}(:,1)).*(Data.P{3}(:,2)-Data.P{1}(:,2))-(Data.P{3}(:,1)-Data.P{1}(:,1)).*(Data.P{2}(:,2)-Data.P{1}(:,2));
(二)已知三点求圆心
参考:https://blog.csdn.net/yanmy2012/article/details/8111600
已知空间三点的坐标为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),求这三个点所确定的空间圆的圆心坐标和半径。 分析可得约束条件:1、三点共面2、三点到空间圆心坐标的距离相等。 从约束条件可得,4个自由项4个方程可解,可以列出线性代数方程组,即可用消元法求解;即以下的(1)(2)(3)(4)四个方程组成的线性代数方程组
共面约束: 三点到空间圆心坐标的距离相等约束: (1) (2)(3)联解可得(5)(6)同时消去R 通过(4)(5)(6)获得关于圆心空间坐标的线性代数方程组 Matlab代码如下:
function A = cen_of_circle(P1,P2,P3)
syms x1 y1 z1 x2 y2 z2 x3 y3 z3
A1 = y1*z2-y1*z3-z1*y2+z1*y3+y2*z3-y3*z2;
B1 = -x1*z2+x1*z3+z1*x2-z1*x3-x2*z3+x3*z2;
C1 = x1*y2-x1*y3-y1*x2+y1*x3+x2*y3-x3*y2;
D1 = -x1*y2*z3+x1*y3*z2+x2*y1*z3-x3*y1*z2-x2*y3*z1+x3*y2*z1;
A2 = 2*(x2-x1);
B2 = 2*(y2-y1);
C2 = 2*(z2-z1);
D2 = x1^2+y1^2+z1^2-x2^2-y2^2-z2^2;
A3 = 2*(x3-x1);
B3 = 2*(y3-y1);
C3 = 2*(z3-z1);
D3 = x1^2 + y1^2 + z1^2 - x3^2 - y3^2 - z3^2;
X = -inv([A1,B1,C1;A2,B2,C2;A3,B3,C3])*[D1;D2;D3];
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 = eval(X');
end
(三)求两向量夹角
A = [1 2 3];
B = [4 5 6];
angle = rad2deg(acos(dot(A,B)/(norm(A)*norm(B)))); % 求A向量与B向量的角度
(四)求两点间距离
A = [1 2 3];
B = [4 5 6];
D = norm(A-B); % 求点A与点B间的距离
|