已知空间三点求圆心坐标,在matlab中的实现方法

先看参考文献:https://blog.csdn.net/yanmy2012/article/details/8111600/

当看到这一句时,默认已经理解了上面参考文献中三点求圆的线性代数理论。

已知理论,那么在matlab中如何实现符号运算呢?

基础知识:matlab编程语法,脚本文件,符号运算
测试环境:matlab2019

符号运算代码如下:

clear;
clc;

syms x y z x1 y1 z1 x2 y2 z2 x3 y3 z3 x0 y0 z0 R

Amatrix=[x,y,z,1;x1,y1,z1,1;x2,y2,z2,1;x3,y3,z3,1]

A1matrix=[y1,z1,1;y2,z2,1;y3,z3,1]
A1=det(A1matrix)

B1matrix=[x1,z1,1;x2,z2,1;x3,z3,1]
B1=-det(B1matrix)

C1matrix=[x1,y1,1;x2,y2,1;x3,y3,1]
C1=det(C1matrix)

D1matrix=[x1,y1,z1;x2,y2,z2;x3,y3,z3]
D1=-det(D1matrix)

Circle1=(x1-x)(x1-x)+(y1-y)(y1-y)+(z1-z)(z1-z)-RR

Circle2=(x2-x)(x2-x)+(y2-y)(y2-y)+(z2-z)(z2-z)-RR

Circle3=(x3-x)(x3-x)+(y3-y)(y3-y)+(z3-z)(z3-z)-RR

f12=Circle1-Circle2

[a21,a22]=coeffs(f12,x)
A2=a21(1,1)
[b21,b22]=coeffs(f12,y)
B2=b21(1,1)
[c21,c22]=coeffs(f12,z)
C2=c21(1,1)

D2=f12-a21(1,1)*x-b21(1,1)*y-c21(1,1)*z

f23=Circle2-Circle3

[a31,a32]=coeffs(f23,x)
A3=a31(1,1)
[b31,b32]=coeffs(f23,y)
B3=b31(1,1)
[c31,c32]=coeffs(f23,z)
C3=c31(1,1)

D3=f23-a31(1,1)*x-b31(1,1)*y-c31(1,1)*z;

pAMatrix=[A1,B1,C1;A2,B2,C2;A3,B3,C3];

pDMatrix=[D1;D2;D3];

X0=-inv(pAMatrix)*pDMatrix;

X0=simplify(subs(X0))

到这里为止,已知空间中不同的且不在同一直线上的三点坐标,其圆心坐标已经求得了,那么求圆的半径自然也不是问题了。

该知识应用场景之一:五轴或六轴机械臂,给定机械臂末端可以经过的三个空间坐标,机械臂如何进行圆弧插补?也许这个知识点就是需要了解的知识之一。

求圆心,半径,空间圆弧7段S加减速路点算法
源代码地址:https://download.csdn.net/download/sbetgcel/12441262

你可能感兴趣的:(matlab,线性代数)