Mercurial > repos > public > sbplib
annotate +parametrization/Ti.m @ 632:d98d9c79573f bugfix/TiVectorInputs
Switch to elementwise multiplication where it was not used
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 23 Oct 2017 15:46:25 +0200 |
parents | 433ccb5d2f0f |
children | 6f4eb3da8978 |
rev | line source |
---|---|
0 | 1 classdef Ti |
2 properties | |
3 gs % {4}Curve | |
4 S % FunctionHandle(u,v) | |
5 end | |
6 | |
7 methods | |
8 % TODO function to label boundary names. | |
9 % function to find largest and smallest delta h in the grid. Maybe shouldnt live here | |
10 function obj = Ti(C1,C2,C3,C4) | |
11 obj.gs = {C1,C2,C3,C4}; | |
12 | |
13 g1 = C1.g; | |
14 g2 = C2.g; | |
15 g3 = C3.g; | |
16 g4 = C4.g; | |
17 | |
18 A = g1(0); | |
19 B = g2(0); | |
20 C = g3(0); | |
21 D = g4(0); | |
22 | |
23 function o = S_fun(u,v) | |
24 x1 = g1(u); | |
25 x2 = g2(v); | |
26 x3 = g3(1-u); | |
27 x4 = g4(1-v); | |
28 o1 = (1-v).*x1(1,:) + u.*x2(1,:) + v.*x3(1,:) + (1-u).*x4(1,:) ... | |
632
d98d9c79573f
Switch to elementwise multiplication where it was not used
Jonatan Werpers <jonatan@werpers.com>
parents:
544
diff
changeset
|
29 -((1-u).*(1-v).*A(1,:) + u.*(1-v).*B(1,:) + u.*v.*C(1,:) + (1-u).*v.*D(1,:)); |
0 | 30 o2 = (1-v).*x1(2,:) + u.*x2(2,:) + v.*x3(2,:) + (1-u).*x4(2,:) ... |
632
d98d9c79573f
Switch to elementwise multiplication where it was not used
Jonatan Werpers <jonatan@werpers.com>
parents:
544
diff
changeset
|
31 -((1-u).*(1-v).*A(2,:) + u.*(1-v).*B(2,:) + u.*v.*C(2,:) + (1-u).*v.*D(2,:)); |
0 | 32 |
33 o = [o1;o2]; | |
34 end | |
35 | |
36 obj.S = @S_fun; | |
37 end | |
38 | |
272
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
39 % Does this funciton make sense? |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
40 % Should it always be eval? |
0 | 41 function [X,Y] = map(obj,u,v) |
42 default_arg('v',u); | |
43 | |
44 if isscalar(u) | |
45 u = linspace(0,1,u); | |
46 end | |
47 | |
48 if isscalar(v) | |
49 v = linspace(0,1,v); | |
50 end | |
51 | |
52 S = obj.S; | |
53 | |
54 nu = length(u); | |
55 nv = length(v); | |
56 | |
57 X = zeros(nv,nu); | |
58 Y = zeros(nv,nu); | |
59 | |
60 u = rowVector(u); | |
61 v = rowVector(v); | |
62 | |
63 for i = 1:nv | |
64 p = S(u,v(i)); | |
65 X(i,:) = p(1,:); | |
66 Y(i,:) = p(2,:); | |
67 end | |
68 end | |
69 | |
272
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
70 % Evaluate S for each pair of u and v, |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
71 % Return same shape as u |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
72 function [x, y] = eval(obj, u, v) |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
73 x = zeros(size(u)); |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
74 y = zeros(size(u)); |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
75 |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
76 for i = 1:numel(u) |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
77 p = obj.S(u(i), v(i)); |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
78 x(i) = p(1,:); |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
79 y(i) = p(2,:); |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
80 end |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
81 end |
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
82 |
0 | 83 function h = plot(obj,nu,nv) |
84 S = obj.S; | |
85 | |
86 default_arg('nv',nu) | |
87 | |
88 u = linspace(0,1,nu); | |
89 v = linspace(0,1,nv); | |
90 | |
91 m = 100; | |
92 | |
93 X = zeros(nu+nv,m); | |
94 Y = zeros(nu+nv,m); | |
95 | |
96 | |
97 t = linspace(0,1,m); | |
98 for i = 1:nu | |
99 p = S(u(i),t); | |
100 X(i,:) = p(1,:); | |
101 Y(i,:) = p(2,:); | |
102 end | |
103 | |
104 for i = 1:nv | |
105 p = S(t,v(i)); | |
106 X(i+nu,:) = p(1,:); | |
107 Y(i+nu,:) = p(2,:); | |
108 end | |
109 | |
110 h = line(X',Y'); | |
111 end | |
112 | |
113 | |
114 function h = show(obj,nu,nv) | |
115 default_arg('nv',nu) | |
116 S = obj.S; | |
117 | |
118 if(nu>2 || nv>2) | |
119 h_grid = obj.plot(nu,nv); | |
120 set(h_grid,'Color',[0 0.4470 0.7410]); | |
121 end | |
122 | |
123 h_bord = obj.plot(2,2); | |
124 set(h_bord,'Color',[0.8500 0.3250 0.0980]); | |
125 set(h_bord,'LineWidth',2); | |
126 end | |
127 | |
128 | |
129 % TRANSFORMATIONS | |
130 function ti = translate(obj,a) | |
131 gs = obj.gs; | |
132 | |
133 for i = 1:length(gs) | |
134 new_gs{i} = gs{i}.translate(a); | |
135 end | |
136 | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
137 ti = parametrization.Ti(new_gs{:}); |
0 | 138 end |
139 | |
140 % Mirrors the Ti so that the resulting Ti is still left handed. | |
141 % (Corrected by reversing curves and switching e and w) | |
142 function ti = mirror(obj, a, b) | |
143 gs = obj.gs; | |
144 | |
145 new_gs = cell(1,4); | |
146 | |
147 new_gs{1} = gs{1}.mirror(a,b).reverse(); | |
148 new_gs{3} = gs{3}.mirror(a,b).reverse(); | |
149 new_gs{2} = gs{4}.mirror(a,b).reverse(); | |
150 new_gs{4} = gs{2}.mirror(a,b).reverse(); | |
151 | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
152 ti = parametrization.Ti(new_gs{:}); |
0 | 153 end |
154 | |
155 function ti = rotate(obj,a,rad) | |
156 gs = obj.gs; | |
157 | |
158 for i = 1:length(gs) | |
159 new_gs{i} = gs{i}.rotate(a,rad); | |
160 end | |
161 | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
162 ti = parametrization.Ti(new_gs{:}); |
0 | 163 end |
164 | |
165 function ti = rotate_edges(obj,n); | |
166 new_gs = cell(1,4); | |
167 for i = 0:3 | |
168 new_i = mod(i - n,4); | |
169 new_gs{new_i+1} = obj.gs{i+1}; | |
170 end | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
171 ti = parametrization.Ti(new_gs{:}); |
0 | 172 end |
173 end | |
174 | |
175 methods(Static) | |
176 function obj = points(p1, p2, p3, p4) | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
177 g1 = parametrization.Curve.line(p1,p2); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
178 g2 = parametrization.Curve.line(p2,p3); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
179 g3 = parametrization.Curve.line(p3,p4); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
180 g4 = parametrization.Curve.line(p4,p1); |
0 | 181 |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
182 obj = parametrization.Ti(g1,g2,g3,g4); |
0 | 183 end |
184 | |
544
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
185 function obj = rectangle(a, b) |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
186 p1 = a; |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
187 p2 = [b(1), a(2)]; |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
188 p3 = b; |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
189 p4 = [a(1), b(2)]; |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
190 |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
191 obj = parametrization.Ti.points(p1,p2,p3,p4); |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
192 end |
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
193 |
332
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
194 % Like the constructor but allows inputing line curves as 2-cell arrays: |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
195 % example: parametrization.Ti.linesAndCurves(g1, g2, {a, b} g4) |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
196 function obj = linesAndCurves(C1, C2, C3, C4) |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
197 C = {C1, C2, C3, C4}; |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
198 c = cell(1,4); |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
199 |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
200 for i = 1:4 |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
201 if ~iscell(C{i}) |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
202 c{i} = C{i}; |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
203 else |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
204 c{i} = parametrization.Curve.line(C{i}{:}); |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
205 end |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
206 end |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
207 |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
208 obj = parametrization.Ti(c{:}); |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
209 end |
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
210 |
0 | 211 function label(varargin) |
212 if nargin == 2 && ischar(varargin{2}) | |
213 label_impl(varargin{:}); | |
214 else | |
215 for i = 1:length(varargin) | |
216 label_impl(varargin{i},inputname(i)); | |
217 end | |
218 end | |
219 | |
220 | |
221 function label_impl(ti,str) | |
222 S = ti.S; | |
223 | |
224 pc = S(0.5,0.5); | |
225 | |
226 margin = 0.1; | |
227 pw = S( margin, 0.5); | |
228 pe = S(1-margin, 0.5); | |
229 ps = S( 0.5, margin); | |
230 pn = S( 0.5, 1-margin); | |
231 | |
232 | |
233 ti.show(2,2); | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
234 parametrization.place_label(pc,str); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
235 parametrization.place_label(pw,'w'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
236 parametrization.place_label(pe,'e'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
237 parametrization.place_label(ps,'s'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
238 parametrization.place_label(pn,'n'); |
0 | 239 end |
240 end | |
241 end | |
242 end |