作业帮 > 综合 > 作业

求空间圆最小二乘拟合的C语言程序

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/29 05:37:59
求空间圆最小二乘拟合的C语言程序
是空间三维的圆,不是平面的
就是给你三个点的坐标,你能把圆心以及半径求出来
求空间圆最小二乘拟合的C语言程序
很久没搞立体几何运算,所以给不出答案.但可以给点建议.
空间不在一条线上的3点,可以确定1个圆.
空间圆的参数方程:
x = Cx + r (Ux*cos(t) + Vx*sin(t));
y = Cy + r (Uy*cos(t) + Vy*sin(t));
x = Cz + r (Uz*cos(t) + Vz*sin(t));
Cx,Cy,Cz 是圆心 x,y,z 座标.r 是半径.
Ux,Uy,Uz 是 与 圆所在平面的 法线 方向 有关 的 单位向量(规一化后的向量)
Vx,Vy,Vz 是 与 圆所在平面的 切线 方向 有关 的 单位向量 (规一化后的向量)
-------
空间不在一条线上的3点,可以组成2个向量,例如
( x3-x1) i + (y3-y1) j + (z3-z1) k
( x2-x1) i + (y2-y1) j + (z2-z1) k
2个向量 的 叉乘积 的 方向 就是 法线方向.
2个向量 的 点乘积 的 方向 就是 切线 方向.
叉乘积公式 用 行列式记:
白白白白| i j k |
a X b = | a1 a2 a3|
白白白白| b1 b2 b3|
点乘积 公式简单,略.
把 方向 系数 代入 空间圆的参数方程 求解便可.
------
还有个关系式 是 半径的 平方 等于 圆心到 圆上一点 空间距离.
r * r = (x-Cx)^2 + (y-Cy)^2 + (z-Cz)^2
再问: 有没有现成的程序? 圆所在平面的 切线 你怎么确定是哪一条?法线肯定就一条
再答: 没有现成程序。圆所在平面 法线有无数条 (指垂直于 圆所在平面 的 任何一条线)。 圆所在平面 “切线” 指 在这个平面上的直线。可以用2点式(3点中任2点连线都可以)。
再问: 切线能不能详细讲讲?
再答: 换个思路。三角形外接圆半径 r = (a*b*c) / (4S) S 是三角形面积。a,b,c 是 3 条边长。 c = sqrt( (x2-x1)*(x2-x1) +(y2-y1)*(y2-y1) +(z2-z1)*(z2-z1)); b = sqrt( (x1-x3)*(x1-x3) +(y1-y3)*(y1-y3) +(z1-z3)*(z1-z3)); a = sqrt( (x3-x2)*(x3-x2) +(y3-y2)*(y3-y2) +(z3-z2)*(z3-z2)); S 用海伦公式计算。你会。 r = (a*b*c) / (4S) 得 半径。 ----------- 接下来,把x1,y1,z1,x2,y2,z2,x3,y3,z3 代入下式: r * r = (x-Cx)^2 + (y-Cy)^2 + (z-Cz)^2 ------^2 这里表示平方 可以有3个方程式,求解圆心 坐标 Cx,Cy,Cz 3个未知数。