comparison +parametrization/Ti3D.m @ 433:eef74cd9b49c feature/grids

Move 3d transfinite interpolation to it's correct location.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 09 Feb 2017 08:37:55 +0100
parents +grid/Ti3D.m@69b078cf8072
children
comparison
equal deleted inserted replaced
425:e56dbd9e4196 433:eef74cd9b49c
1 classdef Ti3D
2 properties
3 gs % {6}Surfaces
4 V % FunctionHandle(XI,ETA,ZETA)
5 end
6
7 methods
8 % TODO write all fancy features for flipping around with the surfaces
9 % Each surface is defined with an outward facing outward and choosing
10 % the "corner" where XI=0 if not possible the corner where ETA=0 is choosen
11 function obj = Ti3D(CW,CE,CS,CN,CB,CT)
12 obj.gs = {CE,CW,CS,CN,CB,CT};
13
14 gw = CW.g;
15 ge = CE.g;
16 gs = CS.g;
17 gn = CN.g;
18 gb = CB.g;
19 gt = CT.g;
20
21 function o = V_fun(XI,ETA,ZETA)
22 XI=XI';
23 ETA=ETA';
24 ZETA=ZETA';
25
26 one=0*ETA+1;
27 zero=0*ETA;
28
29 Sw = gw(ETA,(1-ZETA));
30 Se = ge((1-ETA),(1-ZETA));
31 Ss = gs(XI,ZETA);
32 Sn = gn((1-XI),(1-ZETA));
33 Sb = gb((1-XI),ETA);
34 St = gt(XI,ETA);
35
36 Ewt = gw(ETA,zero);
37 Ewb = gw(ETA,one);
38 Ews = gw(zero,1-ZETA);
39 Ewn = gw(one,1-ZETA);
40 Eet = ge(1-ETA,zero);
41 Eeb = ge(1-ETA,one);
42 Ees = ge(one,1-ZETA);
43 Een = ge(zero,1-ZETA);
44 Enb = gn(1-XI,one);
45 Ent = gn(1-XI,zero);
46 Est = gs(XI,one);
47 Esb = gs(XI,zero);
48
49 Cwbs = gw(zero,one);
50 Cwbn = gw(one,one);
51 Cwts = gw(zero,zero);
52 Cwtn = gw(one,zero);
53 Cebs = ge(one,one);
54 Cebn = ge(zero,one);
55 Cets = ge(one,zero);
56 Cetn = ge(zero,zero);
57
58
59 X1 = (1-XI).*Sw(1,:,:) + XI.*Se(1,:,:);
60 X2 = (1-ETA).*Ss(1,:,:) + ETA.*Sn(1,:,:);
61 X3 = (1-ZETA).*Sb(1,:,:) + ZETA.*St(1,:,:);
62
63 X12 = (1-XI).*(1-ETA).*Ews(1,:,:) + (1-XI).*ETA.*Ewn(1,:,:) + XI.*(1-ETA).*Ees(1,:,:) + XI.*ETA.*Een(1,:,:);
64 X13 = (1-XI).*(1-ZETA).*Ewb(1,:,:) + (1-XI).*ZETA.*Ewt(1,:,:) + XI.*(1-ZETA).*Eeb(1,:,:) + XI.*ZETA.*Eet(1,:,:);
65 X23 = (1-ETA).*(1-ZETA).*Esb(1,:,:) + (1-ETA).*ZETA.*Est(1,:,:) + ETA.*(1-ZETA).*Enb(1,:,:) + ETA.*ZETA.*Ent(1,:,:);
66
67 X123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(1,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(1,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(1,:,:) + ...
68 (1-XI).*ETA.*ZETA.*Cwtn(1,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(1,:,:) + XI.*(1-ETA).*ZETA.*Cets(1,:,:) + ...
69 XI.*ETA.*(1-ZETA).*Cebn(1,:,:) + XI.*ETA.*ZETA.*Cetn(1,:,:);
70
71 X = X1 + X2 + X3 - X12 - X13 - X23 + X123;
72
73
74 Y1 = (1-XI).*Sw(2,:,:) + XI.*Se(2,:,:);
75 Y2 = (1-ETA).*Ss(2,:,:) + ETA.*Sn(2,:,:);
76 Y3 = (1-ZETA).*Sb(2,:,:) + ZETA.*St(2,:,:);
77
78 Y12 = (1-XI).*(1-ETA).*Ews(2,:,:) + (1-XI).*ETA.*Ewn(2,:,:) + XI.*(1-ETA).*Ees(2,:,:) + XI.*ETA.*Een(2,:,:);
79 Y13 = (1-XI).*(1-ZETA).*Ewb(2,:,:) + (1-XI).*ZETA.*Ewt(2,:,:) + XI.*(1-ZETA).*Eeb(2,:,:) + XI.*ZETA.*Eet(2,:,:);
80 Y23 = (1-ETA).*(1-ZETA).*Esb(2,:,:) + (1-ETA).*ZETA.*Est(2,:,:) + ETA.*(1-ZETA).*Enb(2,:,:) + ETA.*ZETA.*Ent(2,:,:);
81
82 Y123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(2,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(2,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(2,:,:) + ...
83 (1-XI).*ETA.*ZETA.*Cwtn(2,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(2,:,:) + XI.*(1-ETA).*ZETA.*Cets(2,:,:) + ...
84 XI.*ETA.*(1-ZETA).*Cebn(2,:,:) + XI.*ETA.*ZETA.*Cetn(2,:,:);
85
86 Y = Y1 + Y2 + Y3 - Y12 - Y13 - Y23 + Y123;
87
88
89 Z1 = (1-XI).*Sw(3,:,:) + XI.*Se(3,:,:);
90 Z2 = (1-ETA).*Ss(3,:,:) + ETA.*Sn(3,:,:);
91 Z3 = (1-ZETA).*Sb(3,:,:) + ZETA.*St(3,:,:);
92
93 Z12 = (1-XI).*(1-ETA).*Ews(3,:,:) + (1-XI).*ETA.*Ewn(3,:,:) + XI.*(1-ETA).*Ees(3,:,:) + XI.*ETA.*Een(3,:,:);
94 Z13 = (1-XI).*(1-ZETA).*Ewb(3,:,:) + (1-XI).*ZETA.*Ewt(3,:,:) + XI.*(1-ZETA).*Eeb(3,:,:) + XI.*ZETA.*Eet(3,:,:);
95 Z23 = (1-ETA).*(1-ZETA).*Esb(3,:,:) + (1-ETA).*ZETA.*Est(3,:,:) + ETA.*(1-ZETA).*Enb(3,:,:) + ETA.*ZETA.*Ent(3,:,:);
96
97 Z123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(3,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(3,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(3,:,:) + ...
98 (1-XI).*ETA.*ZETA.*Cwtn(3,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(3,:,:) + XI.*(1-ETA).*ZETA.*Cets(3,:,:) + ...
99 XI.*ETA.*(1-ZETA).*Cebn(3,:,:) + XI.*ETA.*ZETA.*Cetn(3,:,:);
100
101 Z = Z1 + Z2 + Z3 - Z12 - Z13 - Z23 + Z123;
102 o = [X;Y;Z];
103 end
104
105 obj.V = @V_fun;
106 end
107
108 %Should be rewritten so that the input is xi eta zeta
109 function [X,Y,Z] = map(obj,XI,ETA,ZETA)
110
111 V = obj.V;
112
113 p = V(XI,ETA,ZETA);
114 X = p(1,:)';
115 Y = p(2,:)';
116 Z = p(3,:)';
117
118 end
119
120 % function h = plot(obj,nu,nv)
121 % S = obj.S;
122 %
123 % default_arg('nv',nu)
124 %
125 % u = linspace(0,1,nu);
126 % v = linspace(0,1,nv);
127 %
128 % m = 100;
129 %
130 % X = zeros(nu+nv,m);
131 % Y = zeros(nu+nv,m);
132 %
133 %
134 % t = linspace(0,1,m);
135 % for i = 1:nu
136 % p = S(u(i),t);
137 % X(i,:) = p(1,:);
138 % Y(i,:) = p(2,:);
139 % end
140 %
141 % for i = 1:nv
142 % p = S(t,v(i));
143 % X(i+nu,:) = p(1,:);
144 % Y(i+nu,:) = p(2,:);
145 % end
146 %
147 % h = line(X',Y');
148 % end
149 %
150 %
151 % function h = show(obj,nu,nv)
152 % default_arg('nv',nu)
153 % S = obj.S;
154 %
155 % if(nu>2 || nv>2)
156 % h_grid = obj.plot(nu,nv);
157 % set(h_grid,'Color',[0 0.4470 0.7410]);
158 % end
159 %
160 % h_bord = obj.plot(2,2);
161 % set(h_bord,'Color',[0.8500 0.3250 0.0980]);
162 % set(h_bord,'LineWidth',2);
163 % end
164 %
165 %
166 % % TRANSFORMATIONS
167 % function ti = translate(obj,a)
168 % gs = obj.gs;
169 %
170 % for i = 1:length(gs)
171 % new_gs{i} = gs{i}.translate(a);
172 % end
173 %
174 % ti = grid.Ti(new_gs{:});
175 % end
176 %
177 % % Mirrors the Ti so that the resulting Ti is still left handed.
178 % % (Corrected by reversing curves and switching e and w)
179 % function ti = mirror(obj, a, b)
180 % gs = obj.gs;
181 %
182 % new_gs = cell(1,4);
183 %
184 % new_gs{1} = gs{1}.mirror(a,b).reverse();
185 % new_gs{3} = gs{3}.mirror(a,b).reverse();
186 % new_gs{2} = gs{4}.mirror(a,b).reverse();
187 % new_gs{4} = gs{2}.mirror(a,b).reverse();
188 %
189 % ti = grid.Ti(new_gs{:});
190 % end
191 %
192 % function ti = rotate(obj,a,rad)
193 % gs = obj.gs;
194 %
195 % for i = 1:length(gs)
196 % new_gs{i} = gs{i}.rotate(a,rad);
197 % end
198 %
199 % ti = grid.Ti(new_gs{:});
200 % end
201 %
202 % function ti = rotate_edges(obj,n);
203 % new_gs = cell(1,4);
204 % for i = 0:3
205 % new_i = mod(i - n,4);
206 % new_gs{new_i+1} = obj.gs{i+1};
207 % end
208 % ti = grid.Ti(new_gs{:});
209 % end
210 % end
211 %
212 % methods(Static)
213 % function obj = points(p1, p2, p3, p4)
214 % g1 = grid.Curve.line(p1,p2);
215 % g2 = grid.Curve.line(p2,p3);
216 % g3 = grid.Curve.line(p3,p4);
217 % g4 = grid.Curve.line(p4,p1);
218 %
219 % obj = grid.Ti(g1,g2,g3,g4);
220 % end
221 %
222 % function label(varargin)
223 % if nargin == 2 && ischar(varargin{2})
224 % label_impl(varargin{:});
225 % else
226 % for i = 1:length(varargin)
227 % label_impl(varargin{i},inputname(i));
228 % end
229 % end
230 %
231 %
232 % function label_impl(ti,str)
233 % S = ti.S;
234 %
235 % pc = S(0.5,0.5);
236 %
237 % margin = 0.1;
238 % pw = S( margin, 0.5);
239 % pe = S(1-margin, 0.5);
240 % ps = S( 0.5, margin);
241 % pn = S( 0.5, 1-margin);
242 %
243 %
244 % ti.show(2,2);
245 % grid.place_label(pc,str);
246 % grid.place_label(pw,'w');
247 % grid.place_label(pe,'e');
248 % grid.place_label(ps,'s');
249 % grid.place_label(pn,'n');
250 % end
251 % end
252 end
253 end