Python是一種常用的編程語言,其強大的庫和模塊使其成為科學計算、人工智能等領域的首選。在三維建模中,Python也有其獨特用處。其中之一是繞軸旋轉。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def rotate_around_axis(points, axis, theta): """ 繞軸旋轉 :param points: 待旋轉的點集,Nx3數組 :param axis: 旋轉軸,長度為3的數組 :param theta: 旋轉角度,單位為度 :return: 旋轉后的點集,Nx3數組 """ theta = np.radians(theta) axis = axis / np.linalg.norm(axis) ux, uy, uz = axis cos_theta = np.cos(theta) sin_theta = np.sin(theta) rot_mat = np.array([[cos_theta + ux**2*(1-cos_theta), ux*uy*(1-cos_theta)-uz*sin_theta, ux*uz*(1-cos_theta)+uy*sin_theta], [ux*uy*(1-cos_theta)+uz*sin_theta, cos_theta+uy**2*(1-cos_theta), uy*uz*(1-cos_theta)-ux*sin_theta], [ux*uz*(1-cos_theta)-uy*sin_theta, uy*uz*(1-cos_theta)+ux*sin_theta, cos_theta+uz**2*(1-cos_theta)]]) return np.matmul(rot_mat, points.T).T # 模擬點云數據 x, y, z = np.random.normal(0, 1, (3, 100)) # 三維可視化 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z, c=z) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 繞x軸旋轉30度 theta = 30 x, y, z = rotate_around_axis(np.array([x, y, z]).T, np.array([1, 0, 0]), theta).T # 三維可視化 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z, c=z) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z')
該代碼使用了Numpy和Matplotlib等Python庫。其中,rotate_around_axis函數實現了繞軸旋轉的功能,返回旋轉后的點集。在本例中,我們使用了隨機生成的三維點云,并繞x軸旋轉了30度。
繞軸旋轉是處理三維數據的重要步驟之一。通過Python實現,可以快速、高效地進行旋轉操作,并結合可視化工具呈現旋轉效果。隨著Python在科學計算、人工智能等領域的應用越來越廣泛,繞軸旋轉也將得到更加廣泛的應用。
上一篇python 繪制布林
下一篇vue eggjs