|
51 | 51 | col = 255*quiver_data.Color;
|
52 | 52 | obj.data{quiverIndex}.line.color = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
|
53 | 53 |
|
| 54 | +%-quiver line color-% |
| 55 | +obj.data{quiverIndex}.line.width = quiver_data.LineWidth; |
| 56 | + |
54 | 57 | %------------------------------------------------------------------------%
|
55 | 58 |
|
56 | 59 | % check for x/y vectors
|
57 | 60 | if isvector(quiver_data.XData)
|
58 | 61 | [quiver_data.XData, quiver_data.YData] = meshgrid(quiver_data.XData,quiver_data.YData);
|
59 | 62 | end
|
60 | 63 |
|
| 64 | +%-get scale factor-% |
| 65 | +if strcmpi(quiver_data.AutoScale, 'on') |
| 66 | + xdata = quiver_data.XData; |
| 67 | + udata = quiver_data.UData; |
| 68 | + |
| 69 | + nsteps = 45; |
| 70 | + steps = linspace(1e-3, 1, nsteps); |
| 71 | + steps = steps(end:-1:1); |
| 72 | + |
| 73 | + for n = 1:nsteps |
| 74 | + scalefactor = steps(n); |
| 75 | + |
| 76 | + x = xdata(:, 2:end, :); |
| 77 | + u = xdata(:, 1:end-1,:) + scalefactor * udata(:, 1:end-1,:); |
| 78 | + xflag = x>u; |
| 79 | + |
| 80 | + if all(xflag(:)) |
| 81 | + break |
| 82 | + end |
| 83 | + end |
| 84 | +else |
| 85 | + scalefactor = 1; |
| 86 | +end |
| 87 | + |
| 88 | +%------------------------------------------------------------------------% |
| 89 | + |
61 | 90 | %-format data-%
|
62 |
| -xdata = reshape(quiver_data.XData,1,size(quiver_data.XData,1)*size(quiver_data.XData,1)); |
63 |
| -ydata = reshape(quiver_data.YData,1,size(quiver_data.YData,1)*size(quiver_data.YData,1)); |
64 |
| -udata = reshape(quiver_data.UData,1,size(quiver_data.UData,1)*size(quiver_data.UData,1)); |
65 |
| -vdata = reshape(quiver_data.VData,1,size(quiver_data.VData,1)*size(quiver_data.VData,1)); |
| 91 | +xdata = quiver_data.XData(:); |
| 92 | +ydata = quiver_data.YData(:); |
| 93 | +udata = quiver_data.UData(:)*scalefactor; |
| 94 | +vdata = quiver_data.VData(:)*scalefactor; |
66 | 95 |
|
67 | 96 | %------------------------------------------------------------------------%
|
68 | 97 |
|
69 | 98 | %-quiver x-%
|
70 | 99 | m = 1;
|
71 | 100 | for n = 1:length(xdata)
|
72 | 101 | obj.data{quiverIndex}.x(m) = xdata(n);
|
73 |
| -obj.data{quiverIndex}.x(m+1) = xdata(n) + 0.1*udata(n); |
| 102 | +obj.data{quiverIndex}.x(m+1) = xdata(n) + udata(n); |
74 | 103 | obj.data{quiverIndex}.x(m+2) = nan;
|
75 | 104 | m = m + 3;
|
76 | 105 | end
|
|
81 | 110 | m = 1;
|
82 | 111 | for n = 1:length(ydata)
|
83 | 112 | obj.data{quiverIndex}.y(m) = ydata(n);
|
84 |
| -obj.data{quiverIndex}.y(m+1) = ydata(n) + 0.1*vdata(n); |
| 113 | +obj.data{quiverIndex}.y(m+1) = ydata(n) + vdata(n); |
85 | 114 | obj.data{quiverIndex}.y(m+2) = nan;
|
86 | 115 | m = m + 3;
|
87 | 116 | end
|
88 | 117 |
|
89 | 118 | %-------------------------------------------------------------------------%
|
90 | 119 |
|
91 | 120 | %-quiver barbs-%
|
92 |
| -if isHG2() |
| 121 | +if isHG2() && strcmp(quiver_data.ShowArrowHead, 'on') |
| 122 | + |
93 | 123 | % 'MaxHeadSize' scalar, matlab clips to 0.2 in r2014b
|
94 | 124 | maxheadsize = quiver_data.MaxHeadSize;
|
95 | 125 | % barb angular width, not supported by matlab
|
96 | 126 | head_width = deg2rad(17.5);
|
| 127 | + |
97 | 128 | for n = 1:length(xdata)
|
98 | 129 | % length of arrow
|
99 |
| - l = norm([0.1*udata(n), 0.1*vdata(n)]); |
| 130 | + l = norm([udata(n), vdata(n)]); |
100 | 131 |
|
101 | 132 | % angle of arrow
|
102 | 133 | phi = atan2(vdata(n),udata(n));
|
|
113 | 144 | barb_transformation = affine2d([...
|
114 | 145 | [cos(phi), sin(phi), 0]; ...
|
115 | 146 | [-sin(phi), cos(phi), 0]; ...
|
116 |
| - [xdata(n) + 0.1*udata(n), ydata(n) + 0.1*vdata(n), 1]; |
| 147 | + [xdata(n) + udata(n), ydata(n) + vdata(n), 1]; |
117 | 148 | ]);
|
118 | 149 |
|
119 | 150 | % place barb at end of arrow
|
|
0 commit comments