我们在 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
输入到具有任意旋转的函数中,则输出应为固定形式。再举个例子,如果我们想象一辆汽车,汽车的轮子应该始终在地面上。汽车的标准形式是这样的:轮子在地面上。
这只是一个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]]
我很重视您提供的见解和指导。
如果我理解正确的话,您想要为一组点定义一个标准形式,这样绕 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 坐标的点。通过一些额外的工作也可以解决这种情况。