确定旋转轴矢量并围绕它旋转 3D 点

时间:2021-01-19 14:12:30

标签: python python-3.x numpy

我有三个 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)

0 个答案:

没有答案