forked from csherwood-usgs/FI_processing
-
Notifications
You must be signed in to change notification settings - Fork 0
/
my_rotate_pres2.m
60 lines (49 loc) · 1.13 KB
/
my_rotate_pres2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function [ur,vr,thetad]=my_rotate_pres(u,v,p,thetad)
%function [ur,[vr],thetad]=rotate(u,[v])
% Rotates into direction of maximum variance if no theta
% specified, if theta srotate sin to that direction
% u is vector velocity, ur is rotated vector velocity
% direction of theta is counterclockwise, based on E vel 1st, N vel second
if nargin==1;
v=imag(u);
u=real(u);
maxvar=1;
end
if nargin==2|3;
maxvar=1;
end
if nargin==4;
maxvar=0;
end
if any( isnan(u(:)))|(isnan(v(:)) )
disp('NaNs found')
ur=ones(size(u))*nan;
vr=ur;
g=find( (~isnan(u(:)))&(~isnan(v(:))) );
if length(g)>1;
u=u(g);
v=v(g);
end
else
ur=u;
vr=u;
g=1:length(u(:));
end
if maxvar
if length(g)>1
up=cov([u(:) p(:)]);
vp=cov([v(:) p(:)]);
%cv=cov([u(:) v(:)]);
theta=atan2(vp(1,2),up(1,2));
thetad=theta*180./pi;
else;
thetad=nan;
end
end
vr(g)=-u*sind(thetad)+v*cosd(thetad);
ur(g)=u*cosd(thetad)+v*sind(thetad);
if nargin==1
ur=ur+sqrt(-1)*vr;
vr=thetad;
thetad=[];
end