将平面旋转到xy平面

时间:2019-02-24 12:10:55

标签: python rotation plane

我有一个等式定义的平面:

0.032852 x + 0.064816 y + -58.098021 = z 形式 ax + by + c = z

我想找到某种方法将此平面旋转到此平面,以便在xy平面中完全为2D。我一直在尝试这样做,并附带了这段代码来计算旋转轴(平面法线和z轴的叉积),然后使用z-之间的点积法则计算所需的角度。轴和平面法线。

normal = np.array([a, b, c])
#normalise
mag_normal = np.sqrt(normal.dot(normal))
norm_normal = normal/mag_normal
z_axis = np.array([0, 0, 1])
#find axis of rotation - cross product of normal and z axis
rot_axis_unnorm = np.cross(norm_normal, z_axis)       #not normalised
mag_rot_axis = np.sqrt(rot_axis_unnorm.dot(rot_axis_unnorm))
rot_axis = rot_axis_unnorm/mag_rot_axis               #normalised
#now find the needed angle of rotation
rot_angle = 360 - np.arccos(dot(z_axis, norm_normal))

完成此操作后,我将使用Rodrigues旋转将此旋转应用于一组需要以与平面相同的方式旋转的点。该函数的主要功能是v_rot计算。

def Rodrigues_rot(rot_axis, Rot_theta, xs, ys, zs):
    xyz = np.array((xs, ys, zs))
    k = rot_axis
    theta = Rot_theta
    xyz_Rot =[]
    for i in range(len(xs)):
        v = xyz[:, i] #each point
        v_rot = v*np.cos(theta) + np.cross(k,v)*np.sin(theta) + k*(k.dot(v))*(1 - np.cos(theta))
        xyz_Rot.append((v_rot))

    xyz_Rot = np.array((xyz_Rot))

    xs = xyz_Rot[:,0].reshape((-1,))
    ys = xyz_Rot[:,1].reshape((-1,))
    zs = xyz_Rot[:,2].reshape((-1,))

    return xs, ys, zs


xs, ys, zs = Rodrigues_rot(rot_axis, rot_angle, xs, ys, zs)

不幸的是,这无法正常工作,我似乎无法弄清楚为什么,我的代码还是数学上的问题?

0 个答案:

没有答案