关于基于vtk的paraview里transform的问题
我想把一个向量a变到向量b的位置上,a和b共顶点,只需要做一个旋转,如何求欧拉角
我在网上查到先求旋转轴,加a和b之间的夹角为四元数,再从四元数用公式反求欧拉角
我想问在求四元数的时候旋转轴是否需要先归一化,然后想请人看看代码的问题,因为结果总是不对,自己又看不出问题T_T。
我在网上查到先求旋转轴,加a和b之间的夹角为四元数,再从四元数用公式反求欧拉角
我想问在求四元数的时候旋转轴是否需要先归一化,然后想请人看看代码的问题,因为结果总是不对,自己又看不出问题T_T。
try: paraview.simple
except: from paraview.simple import *
paraview.simple._DisableFirstRenderCameraReset()
from math import *
from numpy import *
from numpy.linalg import *
f=open('D.txt')
for line in iter(f):
# print line
items=line.split()
arrow=Arrow()
arrow = GetActiveSource()
arrow.TipRadius = 0.05
arrow.TipResolution = 32
arrow.ShaftRadius = 0.01
arrow.TipLength = 0.2
arrow.ShaftResolution = 32
dr=GetDisplayProperties(arrow)
dr.DiffuseColor = [1.0, 0.0, 0.0]
dr.Origin = [0.0, 0.0, 0.0]
dr.Position = [2.69616, 15.2011, -2.68065]
dr.Scale = [0.02, 0.02, 0.02]
e=array([1, 0, 0]) #这里是a
print 'e:',e
u=array([float(items[0]),float(items[1]),float(items[2])]) #这里是b
print 'u:',u
v=cross(u,e) #旋转轴
print 'v:',v
print 'norm(v):',norm(v)
v=v/norm(v)
print 'u*e:',dot(u,e)
a=acos(dot(u,e))
q=array([cos(a/2),sin(a/2)*v[0],sin(a/2)*v[1],sin(a/2)*v[2]]) #四元数
print 'q:',q
q=q/norm(q)
print 'normalized q:',q
w=q[0]
x=q[1]
y=q[2]
z=q[3]
#用公式反求的欧拉角
ax=atan2(2*(w*x+y*z),1-2*(x**2+y**2))
ay=arcsin(2*(w*y-z*x))
az=atan2(2*(w*z+x*y),1-2*(y**2+z**2))
print 'ax:',ax,'ay:',ay,'az:',az
dr.Orientation = [180*ax/pi,180*ay/pi,180*az/pi]
f.close()
Render()
...全文
相关推荐
ParaView : 用于几何操作的过滤器在paraview转换
ParaView : 用于几何操作的过滤器在paraview转换
ParaView : 用于几何操作的过滤器在pvpython转换
ParaView : 用于几何操作的过滤器在pvpython转换
ParaView : 用于几何操作的过滤器转换
ParaView : 用于几何操作的过滤器转换
MATLAB实现3D FDTD仿真DNG负折射材料
有限差分时域(FDTD)是一种基础而强大的计算电磁学方法,用于求解麦克斯韦方程组的时域数值解;其核心在于Yee网格离散、显式迭代与边界处理,技术价值体现在无需频域转换即可直接获取宽频响应。在超材料研究中,DNG(双负介质)因具备负介电常数与负磁导率,可实现负折射、逆多普勒等奇异现象,但其强色散与方向依赖性必须通过三维建模才能准确表征。MATLAB凭借原生矩阵运算、稀疏存储优化与可视化调试能力,成为教学验证与快速原型开发的首选工具——尤其适合电磁场研究生、超材料初学者及硬件团队开展轻量化仿真验证。
技术转移机构如何基于数据提升项目撮合精准度?.docx
技术转移机构如何基于数据提升项目撮合精准度?


