【问题标题】:How to calculate rise in of the vectors in 3D which are tilted?如何计算倾斜的 3D 向量的上升?
【发布时间】:2018-02-23 14:17:00
【问题描述】:

我有一个数据,它显示了 3D 空间中向量的起点和终点坐标,这些向量围绕 3 倍螺旋轴定向:

            x          y           z
0   38.522003   5.600998  129.203995  # start of v1
1   23.854996  66.576996  112.487000  # end of v1
2    4.417000  40.182999  121.309998  # start of v2
3   65.761993  27.550995  104.285004  # end of v2
4   50.272003  56.473999  112.857010  #...
5   12.574997   6.202995   96.598007
6   45.192993   8.042999  105.147995
7   15.934998  63.490005   88.347992
8    3.613998  33.112991   97.102997
9   66.244003  35.949997   80.309006
10  44.052994  59.996002   89.057999
11  19.916000   2.125000   72.294998
12  51.201996  11.974998   81.044998
13   9.035995  58.367996   64.238998
14   4.529999  25.854996   72.759003
15  64.563004  44.283997   56.357998
16  37.153000  62.003998   65.026001
17  28.061996   0.000000   48.126995

看起来像这样:

for i in range(xyz_coords.shape[0]):
    if i == 0:
        ax.plot(xyz_coords['x'].loc[0:1], xyz_coords['y'].loc[0:1], xyz_coords['z'].loc[0:1])
    elif i%2 == 0 and i!=0:
        ax.plot(xyz_coords['x'].loc[i:i+1], xyz_coords['y'].loc[i:i+1], xyz_coords['z'].loc[i:i+1])

我想计算向量的每个开始和结束位置相对于下一个向量的上升和角度,并且这些值对于每个 vn 和 vn+1 应该是相似的。问题是矢量偏移不平行于 z 轴 - 否则确定上升将是非常简单的任务。 v1(start) 和 v2(start) 之间的距离给出了它们之间的距离。将上面给出的数据加载为pandas DataFrame,v1和v2的起点距离:

d = np.sqrt((xyz_coords['x'][0] - xyz_coords['x'][2])**2 + (xyz_coords['y'][0] - xyz_coords['y'][2])**2 + (xyz_coords['z'][0] - xyz_coords['z'][2])**2)

您可能还注意到,z 差约为 8.95,但如前所述,z 差不是正确的上升值,因为受倾斜的影响。如果我知道如何确定倾斜角度,我将能够通过使用z_prop = sin(tilt_angle) * d 来计算上升。有什么简单的方法可以校正倾斜并获得正确的 z 值吗?

【问题讨论】:

  • 也许是我,但我没有得到,你的预期输出是什么。您能否提供前三个向量的预期输出?
  • 你可以把它想象成比萨斜塔:你想计算窗口之间的距离(v1(start)到v2(start))但是因为塔是倾斜的,你不能使用z轴值差因为距离会小于实际距离。现在我有类似这座塔的东西,它是倾斜的,并且有不同方向的窗户,但它们不仅彼此上方,而且每隔约 120 度旋转一次,并随着上升而移动。

标签: python pandas matplotlib 3d trigonometry


【解决方案1】:

我认为这个问题没有任何简单的解决方案。在我看来,假设您的向量经过刚体旋转和平移以给出下一个向量的位置,您将必须建立一个由 6 个非线性方程组成的系统来求解 3 个旋转角度和 3 个平移量。我们可以使用scipy.optimize.fsolve 来求解非线性系统。获得旋转角度后,您可以找到相对于 z 轴的倾斜度。但是代码不是微不足道的,因此我无法将其全部写在这里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多