function x_rot_mat, a
n = n_elements(a)
out = make_array(n, 3, 3, /double)
out[*, 0, 0] = 1D
out[*, 1, 1] = cos(2*!DPI*a)
out[*, 2, 1] = -sin(2*!DPI*a)
out[*, 1, 2] = sin(2*!DPI*a)
out[*, 2, 2] = cos(2*!DPI*a)
return, out
end
function y_rot_mat, a
n = n_elements(a)
out = make_array(n, 3, 3, /double)
out[*, 0, 0] = cos(2*!DPI*a)
out[*, 2, 0] = -sin(2*!DPI*a)
out[*, 1, 1] = 1D
out[*, 0, 2] = sin(2*!DPI*a)
out[*, 2, 2] = cos(2*!DPI*a)
return, out
end
function z_rot_mat, a
n = n_elements(a)
out = make_array(n, 3, 3, /double)
out[*, 0, 0] = cos(2*!DPI*a)
out[*, 1, 0] = -sin(2*!DPI*a)
out[*, 0, 1] = sin(2*!DPI*a)
out[*, 1, 1] = cos(2*!DPI*a)
out[*, 2, 2] = 1D
return, out
end
function cross_multiply, l1, l2
compile_opt idl2
dims1 = size(l1, /dimensions)
dims2 = size(l2, /dimensions)
out = make_array(dims1[0]*dims2[0], 3, 3, /double)
for i = 0, dims1[0]-1 do begin
for j = 0, dims2[0]-1 do begin
m1 = reform(l1[i,*,*],3,3)
m2 = reform(l2[j,*,*],3,3)
out[i*dims2[0]+j, *, *] = m2 ## m1
endfor
endfor
return, out
end
pro qslerp_tests, tnum
if(tnum eq 1) then begin
m1 = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
m2 = [[-1, 0, 0], [0, -1, 0], [0, 0, 1]]
qin = transpose([[mtoq(m1)], [mtoq(m2)]])
x1 = [0.0D, 1.0D]
x2 = [0.0D, 1.0/6.0, 1.0/3.0, 1.0/2.0, 2.0/3.0, 5.0/6.0, 1.0D]
qout = qslerp(qin, x1, x2)
mout = qtom(qout)
v = [1, 0, 0]
vout = dblarr(n_elements(x2), 3)
for i = 0, n_elements(x2)-1L do begin
vout[i, *] = (reform(mout[i, *, *], 3, 3))##v
endfor
xp = dblarr(n_elements(x2)*2)
yp = dblarr(n_elements(x2)*2)
xp[2*indgen(n_elements(x2))] = vout[*, 0]
yp[2*indgen(n_elements(x2))] = vout[*, 1]
plots, xp+.5, yp+.5
stop
plot, indgen(n_elements(x2)), acos(vout[*, 0])
stop
plot, indgen(n_elements(x2)), asin(vout[*, 1])
stop
plot, indgen(n_elements(x2)), sqrt(total(vout*vout, 2)),yrange=[0,2]
endif else if (tnum eq 2) then begin
timespan,'2007-03-23'
thm_load_fgm,probe='b',coord='gse',level=2
get_data,'thb_fgl_gse',data=ld,dlimits=ldl
get_data,'thb_fgs_gse',data=sd,dlimits=sdl
idx = where(sd.x gt ld.x[0] and sd.x lt ld.x[n_elements(ld.x)-1])
store_data,'thb_fgs_gse2',data={x:sd.x[idx],y:sd.y[idx,*],v:sd.v},dlimits=sdl
tsmooth2,'thb_fgl_gse',601,newname='thb_fgl_gse_sm601'
fac_matrix_make,'thb_fgl_gse_sm601',other_dim='xgse',newname='thb_fgl_gse_fac_mat'
tvector_rotate,'thb_fgl_gse_fac_mat','thb_fgs_gse2',newname='thb_facx'
tplot,['thb_fgs_gse2','thb_fgl_gse_sm601','thb_facx']
endif else if (tnum eq 3) then begin
m1 = y_rot_mat([-1D/4D, 0D])
m2 = z_rot_mat([0D, 3D/4D])
mlist = make_array(4, 3, 3, /double)
mlist[0:1, *, *] = m2
mlist[2:3, *, *] = m1
qlist = mtoq(mlist)
x1 = dindgen(4)
x2 = dindgen(40)/10
qlist = qslerp(qlist, x1, x2)
mlist = qtom(qlist)
v = [1, 0, 0]
dims = size(mlist, /dimensions)
vlist = make_array(dims[0], 3, /double)
for i = 0, dims[0]-1L do begin
vlist[i, *] = reform(mlist[i,*, *], 3, 3) ## v
endfor
plotxy, vlist
stop
endif else if tnum eq 4 then begin
v = [1, 0, 0]
m1 = x_rot_mat(0)
m2 = z_rot_mat(3D/8D)
m3 = y_rot_mat(-1D/8D)
m4 = z_rot_mat(5D/8D)
m5 = x_rot_mat(1D/16D)
m23 = reform(m3) ## reform(m2)
m45 = reform(m5) ## reform(m4)
q1 = mtoq(m1)
q23 = mtoq(m23)
q45 = mtoq(m45)
ql1 = transpose([[q1], [q23]])
ql2 = transpose([[q23], [q45]])
ql3 = transpose([[q45], [q1]])
qls1 = qslerp(ql1, dindgen(2), dindgen(20)/10)
qls2 = qslerp(ql2, dindgen(2), dindgen(20)/10)
qls3 = qslerp(ql3, dindgen(2), dindgen(20)/10)
mls1 = qtom(qls1)
mls2 = qtom(qls2)
mls3 = qtom(qls3)
dims1 = size(mls1, /dimensions)
dims2 = size(mls2, /dimensions)
dims3 = size(mls3, /dimensions)
vlist = make_array(dims1[0], 3, /double)
for i = 0, dims1[0]-1L do begin
vlist[i, *] = reform(mls1[i, *, *], 3, 3) ## v
endfor
custom = make_array(2, 3, /double)
va = reform(vlist[0, *])
vb = reform(vlist[dims1[0]-1L, *])
vc = crossp(vb, va)
custom[0, *] = vb
custom[1, *] = vc
plotxy, vlist, plotaxes = ['xy', 'xz', 'yrz', 'cc'], custom4 = custom
stop
vlist = make_array(dims2[0], 3, /double)
for i = 0, dims2[0]-1L do begin
vlist[i, *] = reform(mls2[i, *, *], 3, 3) ## v
endfor
custom = make_array(2, 3, /double)
va = reform(vlist[0, *])
vb = reform(vlist[dims2[0]-1L, *])
vc = crossp(vb, va)
custom[0, *] = vb
custom[1, *] = vc
plotxy, vlist, plotaxes = ['xy', 'xz', 'yrz', 'cc'], custom4 = custom
stop
vlist = make_array(dims3[0], 3, /double)
for i = 0, dims3[0]-1L do begin
vlist[i, *] = reform(mls3[i, *, *], 3, 3) ## v
endfor
custom = make_array(2, 3, /double)
va = reform(vlist[0, *])
vb = reform(vlist[dims1[0]-1L, *])
vc = crossp(va, vb)
custom[0, *] = va
custom[1, *] = vc
plotxy, vlist, plotaxes = ['xy', 'xz', 'yrz', 'cc'], custom4 = custom
stop
endif
end