我在[x,y,z]
中有N个点,这种形状采用螺旋形。是否有可能找到这种螺旋的中心轴。这不是常规螺旋,中心轴为global X, Y and Z axis
当我绘制曲线时,查看global Z axis
的特定角度。
我的目标是知道中心轴与global z axis
?
答案 0 :(得分:1)
如果你的N点足够密集(或等距),则切向向量(连续点的diff矢量)将形成一个锥体,其中心轴的方向与螺旋轴的方向一致,并且其基准面是正交的到这个轴方向。将螺旋线投影到该法线平面中将得到一个圆心,其中心位于螺旋轴上。
答案 1 :(得分:1)
我没有使用Matlab,因为我厌恶它,但根据你的情节,我会像这样处理这个问题:
先使用1-2个螺丝并计算其BBOX
此BBOX通话的中心点A
使用最后1-2个螺丝并计算其BBOX
此BBOX通话的中心点B
计算螺旋估算值
因此,行AB
应该非常靠近您的螺旋轴。现在只需找到它的半径的平均或最大垂直距离。使用这些作为初始值来拟合和搜索它们以最小化错误。
任何点P
与AB
的垂直距离都可以使用矢量数学计算如下:
U = B-A
V = P-A
W = (U.V)/|U|
D = V-W
dist = |D|
其中(U.V)
是点积,|U|
是矢量长度。
更精确地适应气缸/螺旋
所以只需搜索初始猜测/估计值,以最小化点和拟合圆柱/螺旋面的平均距离和最大距离。有关更多信息和示例,请参阅:
<强> [注释] 强>
答案 2 :(得分:0)
我认为:
螺旋上的点位于数组df = pandas.read_csv('yourcsv.csv')
df = df.iloc[0, 2] = 1
for i in range(1,len(df.index)-1):
if df.iloc[i, 1] == df.iloc[i+1, 1]: # 1 indicates col ix
pass
else:
df.iloc[i+1, 2] = 1 + df.iloc[i,2] # 2 indicates col ans
中,其中第一维表示时间(或步长),第二维表示位置矢量的3个分量;
时间变量存储在数组pos
中。
您可以计算切向量:
time
然后取平均值:
Tangent=diff(pos(:,1:3))./(diff(time));
你有自己的轴心。