2017-04-07 86 views
0

我在[x,y,z]有N個點,這種螺旋形狀。是否有可能找到這種螺旋的中心軸。這是不是一個規則的螺旋與中心軸作爲global X, Y and Z axis螺旋中心軸角度

要麼當我繪製曲線看與global Z axis特定角度。

enter image description here

我的目標是知道的中心軸線與global z axis使得角θ

+0

配合圓筒狀表面,以最小距離的點...你能分享數據還是至少可以看到情節,以便我們可以看到數據集的一些屬性?就像點的密度是恆定的,隨機的,可變的...每個螺釘有多少個點,螺釘/偏斜比等等...擬合本身可以通過開始估算推斷形式的幾何特性來簡化,如平均切片點數,bbox,主要軸估計等...類似[算法:橢圓匹配](http://stackoverflow.com/a/36054594/2521214) – Spektre

+0

@Spektre增加了一個試驗陰謀 – qwerty123

+0

爲您的陰謀添加了答案 – Spektre

回答

1

如果您的N個點足夠密(或等距離),則切向矢量(連續點的差異向量)將形成一個錐體,其中心軸的方向與螺旋軸的方向一致,其基本平面爲正交於該軸方向。螺旋線投影到這個法線平面會給出一個在螺旋線軸上有一箇中心的圓。

+0

對不起,你說切線向量會形成一個圓錐體。那我怎樣才能得到它的中心軸?如果我們能夠獲得正常的飛機,我認爲螺旋本身可以被正確預測。 – qwerty123

+0

我剛剛意識到:你不需要軸的方向,你可以直接去正常的飛機。只需將切線向量歸一化爲長度1,將它們移動到原點,然後通過終點匹配一個平面。 – coproc

+0

@coproc很好,但只有當點均勻分佈或隨機均勻分佈(形成同心圓)時纔有效。如果它們不是這樣,結果會扭曲到橢圓或更糟的形狀。 – Spektre

1

我不使用Matlab的,因爲我有反感,但基於您的情節我會解決這個問題是這樣的:

  1. 先取1-2螺釘和計算其BBOX

    這個BBOX呼叫中心點A

  2. 採取最後1-2螺釘和計算其BBOX

    這BBOX通話B

  3. 計算的中心點螺旋估計

    所以線AB應該是非常接近的螺旋軸。現在只需找到平均或最大垂直距離即半徑。使用這些值作爲擬合和搜索的初始值,以最大限度地減少錯誤。任何點PAB

    axis

    垂直距離可以用矢量數學地計算這樣的:

    U = B-A 
    V = P-A 
    W = (U.V)/|U| 
    D = V-W 
    dist = |D| 
    

    其中(U.V)是點積和|U|是向量長度。

    distance

  4. 配合氣缸/螺旋更精確地

    所以只是搜索周圍初始猜測/估計以最小化點和嵌合筒/螺旋表面的平均和最大或距離。欲瞭解更多信息和示例,請參閱:

[注意事項]

  1. 如果你不知道如何選擇螺絲,然後將您的設置爲兩半,使用一個用於A,第二個用於B ...
  2. 如果點密度恆定,您可以選擇UTE曲線長度(求和線),螺釘的計數(在任何軸凸塊),螺旋的高度(第一個和最後點之間的距離),並從該推斷半徑爲curve_length = ~sqrt((2*pi*r*screw)^2 + AB_distance^2)
+0

這是更通用的作品,沒有形成同心圓的假設。同樣也接受這個答案 – qwerty123