如何将点转换为固定形式,而不管它们的旋转如何?

问题描述 投票:0回答:1

我们在 3D 空间中有几个点。其中其中两个正好位于Y 轴上。问题在于这些点可能已旋转。现在,如何将这些点(无论其旋转如何)转换为固定形式?

也就是说,无论向哪个方向旋转,都应该转化为标准固定形式。

我非常感谢您的帮助。

points = np.array([[0.,0.,0.]
 [-0.075135,0.538134,-0.323848]
 [-0.,0.697979,-0.]
 [-0.105474,0.11303,-0.087109]
 [-0.169698,0.267493,-0.465798]])

# points = rotate_points_around_point(points, 180, "y", points[0])

points = np.array([[0.,0.,0.]
 [ 0.075135,0.538134,0.323848]
 [-0.,0.697979,0.]
 [ 0.105474,0.11303,0.087109]
 [ 0.169698,0.267493,0.465798]])}

# points = rotate_points_around_point(points, 20, "y", points[0])

points = np.array([[0.,0.,0.]
 [ 0.181367,0.538134,0.27862]
 [-0.,0.697979,0.]
 [ 0.128906,0.11303,0.045782]
 [ 0.318777,0.267493,0.379667]])

如果将

points
输入到具有任意旋转的函数中,则输出应为固定形式。再举个例子,如果我们想象一辆汽车,汽车的轮子应该始终在地面上。汽车的标准形式是这样的:轮子在地面上。

points

points

这只是一个5分的例子。可能有100分。重要的是,围绕Y轴的任何旋转,都应该转化为固定形式。

我想到的是检查这些点最接近哪个平面。例如,如果它们更接近 XZ 平面,请旋转这些点,使它们与该平面的距离最小。不过,这个想法可能不正确。

例如,无论输入如何旋转,输出都应进行如下变换:

[[ 0.        0.        0.      ]
 [ 0.075135  0.538134  0.323848]
 [-0.        0.697979  0.      ]
 [ 0.105474  0.11303   0.087109]
 [ 0.169698  0.267493  0.465798]]

我很重视您提供的见解和指导。

python numpy math 3d rotation
1个回答
0
投票

如果我理解正确的话,您想要为一组点定义一个标准形式,这样绕 y 轴旋转不同的两个点集将具有相同的标准形式。为此,请沿 y 轴以柱坐标表示点。也就是说,如果点的笛卡尔坐标为 (x, y, z),则将其替换为 (r, y, phi),其中 r = √(x^2 + z^2) 且 phi 是满足 cos 的角度Φ = x/r 且 sin Φ = z/r。然后你可以取r坐标最大的点并将所有点旋转等于该点的phi坐标的角度。旋转后的点集采用标准形式。如果有多个点具有相同的最大 r,则在其中选择一个具有最大 y 的点。如果有多个点具有相同的最大 r 和 y,则降低 r 值,然后降低 y 值,寻找这些坐标唯一的点。这就留下了这样的情况:对于每个 r 和 y,都有几个具有不同 phi 坐标的点。通过一些额外的工作也可以解决这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.