Mercurial > repos > public > sbplib
annotate +parametrization/Ti.m @ 272:9fe423849525 feature/beams
Added evalfunction to Ti.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 06 Sep 2016 13:22:28 +0200 |
parents | 81e0ead29431 |
children | 875386d0b2ff |
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,:) ... | |
29 -((1-u)*(1-v).*A(1,:) + u*(1-v).*B(1,:) + u*v.*C(1,:) + (1-u)*v.*D(1,:)); | |
30 o2 = (1-v).*x1(2,:) + u.*x2(2,:) + v.*x3(2,:) + (1-u).*x4(2,:) ... | |
31 -((1-u)*(1-v).*A(2,:) + u*(1-v).*B(2,:) + u*v.*C(2,:) + (1-u)*v.*D(2,:)); | |
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 | |
185 function label(varargin) | |
186 if nargin == 2 && ischar(varargin{2}) | |
187 label_impl(varargin{:}); | |
188 else | |
189 for i = 1:length(varargin) | |
190 label_impl(varargin{i},inputname(i)); | |
191 end | |
192 end | |
193 | |
194 | |
195 function label_impl(ti,str) | |
196 S = ti.S; | |
197 | |
198 pc = S(0.5,0.5); | |
199 | |
200 margin = 0.1; | |
201 pw = S( margin, 0.5); | |
202 pe = S(1-margin, 0.5); | |
203 ps = S( 0.5, margin); | |
204 pn = S( 0.5, 1-margin); | |
205 | |
206 | |
207 ti.show(2,2); | |
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
208 parametrization.place_label(pc,str); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
209 parametrization.place_label(pw,'w'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
210 parametrization.place_label(pe,'e'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
211 parametrization.place_label(ps,'s'); |
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
212 parametrization.place_label(pn,'n'); |
0 | 213 end |
214 end | |
215 end | |
216 end |