多平面包絡(luò)的圓柱體參數(shù)估計
場景
現(xiàn)有多個空間平面包絡(luò)一個柱體,從圓柱頂端俯視如圖所示:
中心位置為圓柱實際所在位置。現(xiàn)在已知這些平面的參數(shù)(每個平面的方程均為ax+by+cz+d=0形式, 參數(shù)為a,b,c,d),希望求解它們包絡(luò)的這個圓柱的幾何信息。
分析
三維空間中,圓柱的幾何信息有兩類表達(dá)方式:
- 圓柱中軸的方向向量
(
u
,
v
,
1
)
(u,v,1)
(u,v,1)和中軸上一點(diǎn)坐標(biāo)
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),以及半徑
r
。 - 圓柱頂面中心點(diǎn)坐標(biāo)
(
x
1
,
y
1
,
z
1
)
(x_1,y_1,z_1)
(x1?,y1?,z1?),底面中心點(diǎn)坐標(biāo)
(
x
2
,
y
2
,
z
2
)
(x_2,y_2,z_2)
(x2?,y2?,z2?),以及半徑
r
。
前一種表達(dá)方式具有最少的參數(shù)量,描述了一個無限高度的空間圓柱體;后一種表達(dá)方式多了一個參數(shù),本質(zhì)上限定了圓柱頂面和底面的位置。
已知的幾何約束包括:
- 中軸垂直于所有平面的法向量。
- 中軸必定被所有平面包圍在內(nèi)部。
- 中軸上任意一點(diǎn)到各平面的距離相等且非0,這個距離就是半徑
r
。
求解方案
多平面包絡(luò)圓柱體只能是在局部范圍內(nèi)包絡(luò)。受計算機(jī)數(shù)值精度影響,很難使所有平面完美相切同一圓柱體,因而很可能出現(xiàn)在不同的Z坐標(biāo)處所包絡(luò)的圓柱體半徑不同的情況。此外,如果沒有Z坐標(biāo),我們只能得到空間直線的方程,實際上沒有太大用處,不易基于它來求半徑。因此一個關(guān)鍵要素就是:先驗的Z值。
根據(jù)應(yīng)用場景,我們假定有先驗估算的z
坐標(biāo)最小值和最大值。
由于沒有任何一個平面過中軸,而是僅僅與圓柱體表面相切,中軸上點(diǎn)的位置無法直接求解??梢钥紤]先求解中軸的方向,再求中軸上一點(diǎn)的坐標(biāo)和半徑。
求解方法一:
- 由于已知所有平面的參數(shù)a、b、c、d,可以直接求出中軸方向:當(dāng)僅有兩個不相交平面時,即可用它們法向量的叉積直接得到中軸方向;平面數(shù)量更多時,需要使用最小二乘法求解最佳的中軸方向。
- 先取出圓柱體中軸上一點(diǎn)的z坐標(biāo)近似值 z 0 z_0 z0?。
- 將該 z 0 z_0 z0?代入所有平面方程,求解中軸上z坐標(biāo)為 z 0 z_0 z0?的一點(diǎn)的x,y坐標(biāo)近似值。由于中軸在多平面包絡(luò)的內(nèi)部,因此只需將平面兩兩相交的交點(diǎn)重心作為x,y坐標(biāo)近似值 ( x ′ , y ′ ) (x',y') (x′,y′)。
- x,y坐標(biāo)精化和半徑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?)是待求的中軸點(diǎn)坐標(biāo)( 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′),半徑取正實數(shù)即可。 - 當(dāng)近似值 ( x ′ , y ′ ) (x',y') (x′,y′)偏差不太大時,即可得到較好的解:中軸上一點(diǎn) ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0?,y0?,z0?),中軸方向和半徑 r r r。
注意到,中軸方向的求解和半徑、中軸點(diǎn)求解是分離的。由此產(chǎn)生解法二:
- 取到圓柱體的z坐標(biāo)范圍 z m i n , z m a x z_{min},z_{max} zmin?,zmax?。
- 將 z m i n z_{min} zmin?代入所有平面方程,求解中軸上z坐標(biāo)為 z m i n z_{min} zmin?的一點(diǎn)的x,y坐標(biāo)近似值。
- 將 z m a x z_{max} zmax?代入所有平面方程,求解中軸上z坐標(biāo)為 z m a x z_{max} zmax?的一點(diǎn)的x,y坐標(biāo)近似值。
- z m i n , z m a x z_{min},z_{max} zmin?,zmax?對應(yīng)的x,y坐標(biāo)精化和半徑r求解。求解的初始值使用上一步得到的近似值,半徑取正實數(shù)即可。為使求解更嚴(yán)謹(jǐn),可以將兩組方程列在一起求解唯一的r。
- 當(dāng)近似值與真實值偏差不太大時,可得到較好的解:中軸兩點(diǎn) ( 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。
求解效果
初始中軸點(diǎn)求解效果:
可見,初始點(diǎn)位在平面包絡(luò)的內(nèi)部空間,可以進(jìn)行下一步精化、半徑求解。文章來源:http://www.zghlxwxcb.cn/news/detail-770859.html
最終的可視化結(jié)果如圖:文章來源地址http://www.zghlxwxcb.cn/news/detail-770859.html
到了這里,關(guān)于多平面包絡(luò)的圓柱體參數(shù)估計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!