Mercurial > repos > public > sbplib
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 |