2017-04-07 89 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