python - 在 Python 中使用欧拉角旋转 3D 对象
问题描述
看这张照片。在这种情况下,长方体必须沿着图片中标记的其他轴旋转,但它保持在同一轴 x、y、z上。所附图像给出了长方体的代码。
##defining to plot the cuboid
def plot_cuboid(center, size):
"""
Create a data array for cuboid plotting.
============= ================================================
Argument Description
============= ================================================
center center of the cuboid, triple
size size of the cuboid, triple, (x_length,y_width,z_height)
:type size: tuple, numpy.array, list
:param size: size of the cuboid, triple, (x_length,y_width,z_height)
:type center: tuple, numpy.array, list
:param center: center of the cuboid, triple, (x,y,z)
"""
# suppose axis direction: x: to left; y: to inside; z: to upper
# get the (left, outside, bottom) point
ox, oy, oz = center
l, w, h = size
##defining the points
x = np.linspace(ox-l/2,ox+l/2,num=10)
y = np.linspace(oy-w/2,oy+w/2,num=10)
z = np.linspace(oz-h/2,oz+h/2,num=10)
## defining surfaces and extrude them
x1, z1 = np.meshgrid(x, z)
y11 = np.ones_like(x1)*(oy-w/2)
y12 = np.ones_like(x1)*(oy+w/2)
x2, y2 = np.meshgrid(x, y)
z21 = np.ones_like(x2)*(oz-h/2)
z22 = np.ones_like(x2)*(oz+h/2)
y3, z3 = np.meshgrid(y, z)
x31 = np.ones_like(y3)*(ox-l/2)
x32 = np.ones_like(y3)*(ox+l/2)
ax = fig.gca(projection='3d') ##plot the project cuboid
#plot outside surface
ax.plot_surface(x1, y11, z1, color='red', rstride=1, cstride=1, alpha=0.6)
#plot inside surface
ax.plot_surface(x1, y12, z1, color='white', rstride=1, cstride=1, alpha=0.6)
#plot bottom surface
ax.plot_surface(x2, y2, z21, color='blue', rstride=1, cstride=1, alpha=0.6)
#plot upper surface
ax.plot_surface(x2, y2, z22, color='black', rstride=1, cstride=1, alpha=0.6)
#plot left surface
ax.plot_surface(x31, y3, z3, color='green', rstride=1, cstride=1, alpha=0.6)
#plot right surface
ax.plot_surface(x32, y3, z3, color='pink', rstride=1, cstride=1, alpha=0.6)
## Add title
plt.title('Plot_for_PSM', fontsize=20)
##labelling the axes
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
`
我的问题是我们可以用python中的欧拉角旋转下面定义的长方体吗?
中心 =(2.1,-0.1,0.757761) 长度=0.3,宽度=0.4,高度=0.1 均以米为单位。根据附图中的代码。欧拉角为 0,0,120,例如沿 x、y、z 方向。
我制作了一些程序来用欧拉角旋转一个长方体。但是在达到欧拉角之后,如何旋转长方体是我的问题。任何人都可以建议或获得此问题的代码吗?
实际上,我有四元数,它们被转换成欧拉角,然后想根据这些欧拉角沿着它们的轴用右手定则旋转。您可以查看我所做的代码,也可以建议我做错了什么。
代码中'y'代表与x轴的夹角,'p'代表与y轴的夹角,'r'代表与z轴的夹角。预期的结果是长方体必须沿着这些欧拉角(y,p,r)相对于 x,y,z 轴旋转。
提前致谢!
解决方案
首先计算角的位置向量(xyz 坐标),然后scipy.spatial.transform.Rotation
在每个角上使用。
推荐阅读
- terraform - 如何在 google_logging_metric 资源中使用格式函数
- r - 连接R中函数内部结构的值
- javascript - 在Javascript中添加所有数组项的最佳方法是什么
- python - Python np.sqrt(xa)*np.heaviside(x,a)
- ios - 在父 ViewController 中重新加载数据/刷新数据
- shiro - Shiro 注销页面:“没有带有 id 的会话” - Shiro
- python - 分析多个数据框列以创建新的分类变量?
- android - Flutter Firebase auth facebook无法正常工作
- c++ - 构建 sqlite3mc 合并失败并出现“_mm_aesimc_si128”:目标特定选项不匹配 - 即使使用 -march=native
- sql - SQL 同时选择和更新多个用户