螺旋中心轴角

helix central axis angle

我在 [x,y,z] 中有 N 个点,这种形状呈螺旋状。有没有可能找到这样一个螺旋的中心轴。这不是中轴为 global X, Y and Z axis

的规则螺旋线

当我绘制曲线时,曲线看起来与 global Z axis 成特定角度。

我的目的是了解中轴与 global z axis?

的夹角

如果你的N点足够密集(或等距),切向量(连续点的差向量)将形成一个圆锥体,其中心轴方向与螺旋轴方向重合,其基面正交于该轴方向。将螺旋投影到该法平面将得到一个圆心在螺旋轴上的圆。

我不使用 Matlab,因为我厌恶它,但根据你的情节,我会这样处理这个问题:

  1. 取前1-2个螺丝,计算其BBOX

    本次BBOX调用的中心点A

  2. 取最后1-2颗螺丝,计算其BBOX

    本次BBOX调用的中心点B

  3. 计算螺旋估计

    所以线 AB 应该非常靠近你的螺旋轴。现在只需找到它的平均或最大垂直距离,即您的半径。使用这些作为拟合的初始值并在它们周围搜索以最小化错误。

    任何点 PAB 的垂直距离可以用矢量数学计算如下:

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

    其中 (U.V) 是点积,|U| 是向量长度。

  4. 更准确地适合cylinder/helix

    所以只需搜索初始 guess/estimate 以最小化点和拟合 cylinder/helix 表面的平均和/或最大距离。有关更多信息和示例,请参阅:

[备注]

  1. 如果您不知道如何 select 螺丝,那么将您的套装分成两半,一个用于 A,第二个用于 B ...
  2. 如果点密度恒定,您可以计算曲线长度(对线求和)、螺钉数(任何轴上的凸起)、螺旋高度(第一个点和最后一个点之间的距离),并从该推断半径为 curve_length = ~sqrt((2*pi*r*screw)^2 + AB_distance^2)

我假设:

  • 螺旋上的点在数组 pos 中,第一维表示时间(或步长),第二维表示位置向量的 3 个分量;

  • 时间变量存储在数组time.

您可以计算切向量:

Tangent=diff(pos(:,1:3))./(diff(time));

然后取平均值:

meanTangent=mean(Tangent);

你有你的轴。