4,499
社区成员




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()