我有三个 3D 点 ((origin1, origin2, origin3
)),我必须从中定义旋转轴,还有一个 3D 点 (point_to_rotate
),它应该围绕通过的那个轴旋转通过三个起源。
目前我正在使用二维旋转矩阵 (link) 围绕 origin1
(z-axis
) 旋转点,该矩阵按预期工作,直到我的 origin1
点倾斜一个方向。
import numpy as np
import math
# Rotate a point clockwise by a given angle around a given origin.
def rotate_point_around_origin(origin, point, angle):
angle = math.radians(angle % 360)
ox, oy, oz = origin
px, py, pz = point
qx = ox + math.cos(angle) * ((px) - ox) - math.sin(angle) * (py - oy)
qy = oy + math.sin(angle) * ((px) - ox) + math.cos(angle) * (py - oy)
qz = pz # unchanged
return qx, qy, qz
def main():
'''
# y axis is shifted
origin1= np.array([-1.141, 10.590, 1078.312])
origin2= np.array([-1.141, 50.590, 1087.312])
origin3= np.array([-1.141, 100.590, 1095.312])
origin = np.mean([origin1, origin2, origin3], axis=0)
print('origin: ', origin)
'''
# each origin is on the same z axis
origin1= np.array([-1.141, -172.590, 1078.312])
origin2= np.array([-1.141, -172.590, 1088.312])
origin3= np.array([-1.141, -172.590, 1098.312])
point_to_rotate = np.array([1.12, 199.32, 1062.88])
angle = 0
for i in range(9):
angle = angle + 36
rotated_point = rotate_point_around_origin(origin1, point_to_rotate, angle)
print('i:', i, 'degree: ', angle, 'rotated:', rotated_point)
if __name__ == "__main__":
main()
我如何确定穿过原点的旋转轴并仍然以给定的角度围绕它旋转我的点?如有任何建议,我们将不胜感激。
编辑: 我确定了交叉产品的旋转轴,但仍然没有到达那里
#find axis vector of three points
v1 = origin1 - origin2
v2 = origin2 - origin3
origin = np.cross(v1, v2)
print('axisvector: ', origin)