- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想用 3x3 旋转矩阵旋转一个 mayavi.mlab.imshow
对象。我能找到的唯一旋转此对象的方法是将对象的 actor.orientation
设置为 [pitch, roll, yaw]
(此顺序继承自 vtk)。我唯一的问题是我找不到将旋转矩阵转换为 mayavi 请求的参数的方法。
我如何在 mayavi 中使用旋转矩阵旋转对象,或者我应该使用什么变换来获得 Mayavi/Vtk 使用的正确(俯仰、滚动和偏航)?
我找到了一些代码 over here将旋转矩阵转换为不同类型的欧拉角(根据旋转顺序)。如果我错误地假设欧拉角等于俯仰、滚动、偏航,请在这一点上纠正我。我尝试了所有不同的转换,但未能找到正确的转换。
我通过使用我的旋转矩阵旋转 x、y 和 z 向量并测试 mayavi.mlab.imshow
对象上的参数来测试所有不同的变换。我在 R
和 transpose(R)
上使用了所有可用的变换,并在所有 9 个可用顺序中使用了 Euler 参数,但找不到正确的组合:
import pylab as pl
import cameraTools #my own lib
from mayavi import mlab
im = pl.imread('dice.png', format='png')[:,:,0]*255 #1 color channel
rot = pl.r_[30, 80, 230]
R_orig = cameraTools.composeRotation(*(rot*pl.pi/180))
RList = [R_orig, R_orig.T]
for ii, inOrder in enumerate(['sxyz','sxzx','syxz','szxz','rzyx','rxzx','rzxy','rzxz','sxyx','syzx','syxy','szyx','rxyx','rxzy','ryxy','rxyz','sxzy','syzy','szxy','szyz','ryzx','ryzy','ryxz','rzyz']):
tries = 0
for outOrder in [[0,1,2], [0,2,1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]:
for R in RList:
for vector, color in zip([[800, 0, 0], [0, 800, 0], [0, 0, 800]],
[(1., 0., 0.), (0., 1., 0.), (0., 0., 1.)]):
c = pl.c_[[0, tries*1000, ii*1000]]
if ii == 0 and tries == 0: vector = pl.r_[vector]*5 #point out the first vector
lin = R_orig.dot(pl.c_[[0,0,0], vector]) + c
mlab.plot3d(*lin,
color = color,
tube_radius=5)
lin3D = mlab.imshow(im, colormap="gray")
rxyz = pl.array(cameraTools.euler_from_matrix(R, inOrder))*180/pi
i,j,k = outOrder
lin3D.actor.orientation = [rxyz[i], rxyz[j], rxyz[k]]
lin3D.actor.position = c.flatten()
tries +=1
mlab.draw()
mlab.show()
Mayavi 的输出,左上角的项目是起点。
最佳答案
对不起,我好像注意力不够集中。答案在第 3 行第 5 列,具有 syxz
输入顺序和 '[1,0,2]'
输出顺序。我现在使用以下函数将旋转矩阵转换为所需的欧拉角:
def rotationToVtk(R):
'''
Concert a rotation matrix into the Mayavi/Vtk rotation paramaters (pitch, roll, yaw)
'''
def euler_from_matrix(matrix):
"""Return Euler angles (syxz) from rotation matrix for specified axis sequence.
:Author:
`Christoph Gohlke <http://www.lfd.uci.edu/~gohlke/>`_
full library with coplete set of euler triplets (combinations of s/r x-y-z) at
http://www.lfd.uci.edu/~gohlke/code/transformations.py.html
Note that many Euler angle triplets can describe one matrix.
"""
# epsilon for testing whether a number is close to zero
_EPS = np.finfo(float).eps * 5.0
# axis sequences for Euler angles
_NEXT_AXIS = [1, 2, 0, 1]
firstaxis, parity, repetition, frame = (1, 1, 0, 0) # ''
i = firstaxis
j = _NEXT_AXIS[i+parity]
k = _NEXT_AXIS[i-parity+1]
M = np.array(matrix, dtype='float', copy=False)[:3, :3]
if repetition:
sy = np.sqrt(M[i, j]*M[i, j] + M[i, k]*M[i, k])
if sy > _EPS:
ax = np.arctan2( M[i, j], M[i, k])
ay = np.arctan2( sy, M[i, i])
az = np.arctan2( M[j, i], -M[k, i])
else:
ax = np.arctan2(-M[j, k], M[j, j])
ay = np.arctan2( sy, M[i, i])
az = 0.0
else:
cy = np.sqrt(M[i, i]*M[i, i] + M[j, i]*M[j, i])
if cy > _EPS:
ax = np.arctan2( M[k, j], M[k, k])
ay = np.arctan2(-M[k, i], cy)
az = np.arctan2( M[j, i], M[i, i])
else:
ax = np.arctan2(-M[j, k], M[j, j])
ay = np.arctan2(-M[k, i], cy)
az = 0.0
if parity:
ax, ay, az = -ax, -ay, -az
if frame:
ax, az = az, ax
return ax, ay, az
r_yxz = pl.array(euler_from_matrix(R))*180/pi
r_xyz = r_yxz[[1, 0, 2]]
return r_xyz
关于python - 将旋转矩阵正确转换为 Mayavi/Vtk 的(俯仰、滚动、偏航),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24482590/
我必须在 Android 中从陀螺仪的智能手机输出中计算偏航、滚转、俯仰,我编写了以下代码: if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE){
四元数有利于它们之间的内插旋转。到目前为止,一切都很好。 如果我有一个网络游戏,将旋转量转换为vector3f就足够了还是应该使用四元数? 为了使游戏更流畅,我可能必须在上次发送的旋转和当前旋转之间进
我正在使用Reach RS +设备来捕获GPS位置数据以及IMU数据(侧倾,俯仰和偏航);请参阅制造商website上的“ Point Collection”图像。 我正在尝试确定底点的GPS坐标(接
如果可能的话,我想知道如何获得确定 Android 设备位置的航向、俯仰和滚动角度。不要考虑设备相关的细节。引用有用的文档也很有值(value)。谢谢! 最佳答案 我手头没有精确的解决方案,但全口径解
我在 WorldWind 中有一个 3D 飞机模型,这是一个在 OpenGL Java 上运行的 3D 地球模型。我使用数据库中的数据(包括纬度、经度和替代度)更新此模型的位置。如何从当前位置获取航向
我想在没有红外感应条的情况下使用 wiimote 来控制光标。我为此使用了俯仰和滚动值。问题是俯仰接近0度的时候,横滚很不稳定,而俯仰接近90度的时候,本身就很不稳定,但是横滚还好。我非常频繁地轮询
我正在为我的学校做一个编程主题的项目。我在 Swift 的 Xcode 中工作。我想制作一个使用陀螺仪的应用程序。我不知道,但由于 Xcode 中的一些我不知道如何修复的错误,它不会在我的 iPhon
我正在尝试使用 Vision 框架获取图像中人脸的俯仰/偏航/滚动,但始终为所有值获取 0。图像应该很容易处理(主要是前瞻性肖像)。 我通过对它们使用 Amazon Rekognition 成功获得了
我有一个基于提供的纬度/经度坐标、缩放、偏航和俯仰的谷歌地图和街景。我需要调用一个 javascript 来为每个值更新一个隐藏字段,每当任何细节从它们的默认值发生变化或当一个按钮被点击时。 因此,无
我的观众没有收到来自被跟随球员的任何投球轮换。 我正尝试与 ShooterGame 项目合作,对 FPS 旁观者功能进行概念验证。我在 GameMode 中添加了将 VictimPlayer 切换到旁
我正在尝试使用陀螺仪制作一个简单的应用程序,其中角色会根据 iPad 1 的旋转进行移动。 我的代码无法正常工作,因此我测试了原始、俯仰、偏航的值,无论我如何移动设备,它们实际上都保持为零。我确定 i
用于从 cvPOSIT 生成的 3*3 旋转矩阵计算偏航(z 轴)、横滚(x 轴)和俯仰(y 轴)的算法是什么。 最佳答案 使用cv::RQDecomp3x3() .“它可选择返回三个旋转矩阵,每个轴
我已经研究了一段时间,现在我必须决定走哪条路。 矿山要求:需要知道设备相对于真实航向(地理北极,而非磁极)的方向。为此,我必须使用指南针,现在我必须决定其他的东西,加速度计或陀螺仪。 因为这对我来说是
我的问题 我想用 3x3 旋转矩阵旋转一个 mayavi.mlab.imshow 对象。我能找到的唯一旋转此对象的方法是将对象的 actor.orientation 设置为 [pitch, roll,
我是一名优秀的程序员,十分优秀!