圆柱中轴的方向向量
(
u
,
v
,
1
)
(u,v,1)
(u,v,1)和中轴上一点坐标
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),以及半径r。
圆柱顶面中心点坐标
(
x
1
,
y
1
,
z
1
)
(x_1,y_1,z_1)
(x1?,y1?,z1?),底面中心点坐标
(
x
2
,
y
2
,
z
2
)
(x_2,y_2,z_2)
(x2?,y2?,z2?),以及半径r。 前一种表达方式具有最少的参数量,描述了一个无限高度的空间圆柱体;后一种表达方式多了一个参数,本质上限定了圆柱顶面和底面的位置。
将该
z
0
z_0
z0?代入所有平面方程,求解中轴上z坐标为
z
0
z_0
z0?的一点的x,y坐标近似值。由于中轴在多平面包络的内部,因此只需将平面两两相交的交点重心作为x,y坐标近似值
(
x
′
,
y
′
)
(x',y')
(x′,y′)。
x,y坐标精化和半径r求解。这一步利用约束3,列出约束条件方程:
∣
∣
a
x
0
+
b
y
0
+
c
z
0
+
d
∣
a
2
+
b
2
+
c
2
?
r
∣
=
0
|\frac{|ax_0+by_0+cz_0+d|}{\sqrt{a^2+b^2+c^2}}-r|=0
∣a2+b2+c2?∣ax0?+by0?+cz0?+d∣??r∣=0 其中
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0?,y0?,z0?)是待求的中轴点坐标(
z
0
z_0
z0?已知)。由于带有绝对值符号,求解存在一定困难,可以考虑使用下面的形式:
(
a
x
0
+
b
y
0
+
c
z
0
+
d
)
2
a
2
+
b
2
+
c
2
?
r
2
=
0
\frac{(ax_0+by_0+cz_0+d)^2}{a^2+b^2+c^2}-r^2=0
a2+b2+c2(ax0?+by0?+cz0?+d)2??r2=0 求解的初始值使用近似值
(
x
′
,
y
′
)
(x',y')
(x′,y′),半径取正实数即可。
当近似值
(
x
′
,
y
′
)
(x',y')
(x′,y′)偏差不太大时,即可得到较好的解:中轴上一点
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0?,y0?,z0?),中轴方向和半径
r
r
r。
注意到,中轴方向的求解和半径、中轴点求解是分离的。由此产生解法二:
取到圆柱体的z坐标范围
z
m
i
n
,
z
m
a
x
z_{min},z_{max}
zmin?,zmax?。
将
z
m
i
n
z_{min}
zmin?代入所有平面方程,求解中轴上z坐标为
z
m
i
n
z_{min}
zmin?的一点的x,y坐标近似值。
将
z
m
a
x
z_{max}
zmax?代入所有平面方程,求解中轴上z坐标为
z
m
a
x
z_{max}
zmax?的一点的x,y坐标近似值。
z
m
i
n
,
z
m
a
x
z_{min},z_{max}
zmin?,zmax?对应的x,y坐标精化和半径r求解。求解的初始值使用上一步得到的近似值,半径取正实数即可。为使求解更严谨,可以将两组方程列在一起求解唯一的r。
当近似值与真实值偏差不太大时,可得到较好的解:中轴两点
(
x
m
i
n
,
y
m
i
n
,
z
m
i
n
)
(x_{min},y_{min},z_{min})
(xmin?,ymin?,zmin?)、
(
x
m
a
x
,
y
m
a
x
,
z
m
a
x
)
(x_{max},y_{max},z_{max})
(xmax?,ymax?,zmax?)和半径
r
r
r。