comparison +parametrization/Curve.m @ 425:e56dbd9e4196 feature/grids

Merge feature/beams
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 07 Feb 2017 16:09:02 +0100
parents 0fd4b259af9e
children 0776fa4754ff
comparison
equal deleted inserted replaced
423:a2cb0d4f4a02 425:e56dbd9e4196
22 assert(all(size(p_test) == [2,1]), 'A curve parametrization must return a 2x1 vector.'); 22 assert(all(size(p_test) == [2,1]), 'A curve parametrization must return a 2x1 vector.');
23 23
24 if ~isempty(transformation) 24 if ~isempty(transformation)
25 transformation.base_g = g; 25 transformation.base_g = g;
26 transformation.base_gp = gp; 26 transformation.base_gp = gp;
27 [g,gp] = grid.Curve.transform_g(g,gp,transformation); 27 [g,gp] = parametrization.Curve.transform_g(g,gp,transformation);
28 end 28 end
29 29
30 obj.g = g; 30 obj.g = g;
31 obj.gp = gp; 31 obj.gp = gp;
32 obj.transformation = transformation; 32 obj.transformation = transformation;
66 set(h,'Color',Color.red); 66 set(h,'Color',Color.red);
67 obj.plot(m); 67 obj.plot(m);
68 end 68 end
69 69
70 function h= show(obj,name) 70 function h= show(obj,name)
71 default_arg('name', '')
71 p = obj.g(1/2); 72 p = obj.g(1/2);
72 n = obj.normal(1/2); 73 n = obj.normal(1/2);
73 p = p + n*0.1; 74 p = p + n*0.1;
74 75
75 % Add arrow 76 % Add arrow
76 77
77 h = text(p(1),p(2),name); 78
78 h.HorizontalAlignment = 'center'; 79 if ~isempty(name)
79 h.VerticalAlignment = 'middle'; 80 h = text(p(1),p(2),name);
80 81 h.HorizontalAlignment = 'center';
81 obj.plot(); 82 h.VerticalAlignment = 'middle';
83 end
84
85 h = obj.plot();
82 end 86 end
83 % Shows curve with name and arrow for direction. 87 % Shows curve with name and arrow for direction.
84 88
85 % Length of arc from parameter t0 to t1 (which may be vectors). 89 % Length of arc from parameter t0 to t1 (which may be vectors).
86 % Computed using derivative. 90 % Computed using derivative.
104 arcPar = @(s) tFunc(s*L); 108 arcPar = @(s) tFunc(s*L);
105 109
106 % New function and derivative 110 % New function and derivative
107 g_new = @(t)obj.g(arcPar(t)); 111 g_new = @(t)obj.g(arcPar(t));
108 gp_new = @(t) normalize(obj.gp(arcPar(t))); 112 gp_new = @(t) normalize(obj.gp(arcPar(t)));
109 curve = grid.Curve(g_new,gp_new); 113 curve = parametrization.Curve(g_new,gp_new);
110 114
111 end 115 end
112 116
113 % how to make it work for methods without returns 117 % how to make it work for methods without returns
114 function p = subsref(obj,S) 118 function p = subsref(obj,S)
129 133
130 %% TRANSFORMATION OF A CURVE 134 %% TRANSFORMATION OF A CURVE
131 function D = reverse(C) 135 function D = reverse(C)
132 % g = C.g; 136 % g = C.g;
133 % gp = C.gp; 137 % gp = C.gp;
134 % D = grid.Curve(@(t)g(1-t),@(t)-gp(1-t)); 138 % D = parametrization.Curve(@(t)g(1-t),@(t)-gp(1-t));
135 D = C.transform([],[],-1); 139 D = C.transform([],[],-1);
136 end 140 end
137 141
138 function D = transform(C,A,b,flip) 142 function D = transform(C,A,b,flip)
139 default_arg('A',[1 0; 0 1]); 143 default_arg('A',[1 0; 0 1]);
155 transformation.A = A*A_old; 159 transformation.A = A*A_old;
156 transformation.b = A*b_old + b; 160 transformation.b = A*b_old + b;
157 transformation.flip = flip*flip_old; 161 transformation.flip = flip*flip_old;
158 end 162 end
159 163
160 D = grid.Curve(g,gp,transformation); 164 D = parametrization.Curve(g,gp,transformation);
161 165
162 end 166 end
163 167
164 function D = translate(C,a) 168 function D = translate(C,a)
165 g = C.g; 169 g = C.g;
169 % x = g(t); 173 % x = g(t);
170 % v(1,:) = x(1,:)+a(1); 174 % v(1,:) = x(1,:)+a(1);
171 % v(2,:) = x(2,:)+a(2); 175 % v(2,:) = x(2,:)+a(2);
172 % end 176 % end
173 177
174 % D = grid.Curve(@g_fun,gp); 178 % D = parametrization.Curve(@g_fun,gp);
175 179
176 D = C.transform([],a); 180 D = C.transform([],a);
177 end 181 end
178 182
179 function D = mirror(C, a, b) 183 function D = mirror(C, a, b)
204 208
205 % function v = gp_fun(t) 209 % function v = gp_fun(t)
206 % v = A*gp(t); 210 % v = A*gp(t);
207 % end 211 % end
208 212
209 % D = grid.Curve(@g_fun,@gp_fun); 213 % D = parametrization.Curve(@g_fun,@gp_fun);
210 214
211 % g = A(g-a)+a = Ag - Aa + a; 215 % g = A(g-a)+a = Ag - Aa + a;
212 b = - A*a + a; 216 b = - A*a + a;
213 D = C.transform(A,b); 217 D = C.transform(A,b);
214 218
235 239
236 % function v = gp_fun(t) 240 % function v = gp_fun(t)
237 % v = A*gp(t); 241 % v = A*gp(t);
238 % end 242 % end
239 243
240 % D = grid.Curve(@g_fun,@gp_fun); 244 % D = parametrization.Curve(@g_fun,@gp_fun);
241 245
242 246
243 % g = A(g-a)+a = Ag - Aa + a; 247 % g = A(g-a)+a = Ag - Aa + a;
244 b = - A*a + a; 248 b = - A*a + a;
245 D = C.transform(A,b); 249 D = C.transform(A,b);
264 268
265 function v = g_fun(t) 269 function v = g_fun(t)
266 v(1,:) = p1(1) + t.*(p2(1)-p1(1)); 270 v(1,:) = p1(1) + t.*(p2(1)-p1(1));
267 v(2,:) = p1(2) + t.*(p2(2)-p1(2)); 271 v(2,:) = p1(2) + t.*(p2(2)-p1(2));
268 end 272 end
269 g = @g_fun; 273
270 274 function v = g_fun_deriv(t)
271 obj = grid.Curve(g); 275 v(1,:) = t.*0 + (p2(1)-p1(1));
276 v(2,:) = t.*0 + (p2(2)-p1(2));
277 end
278
279 obj = parametrization.Curve(@g_fun, @g_fun_deriv);
272 end 280 end
273 281
274 function obj = circle(c,r,phi) 282 function obj = circle(c,r,phi)
275 default_arg('phi',[0; 2*pi]) 283 default_arg('phi',[0; 2*pi])
276 default_arg('c',[0; 0]) 284 default_arg('c',[0; 0])
286 w = phi(1)+t*(phi(2)-phi(1)); 294 w = phi(1)+t*(phi(2)-phi(1));
287 v(1,:) = -(phi(2)-phi(1))*r*sin(w); 295 v(1,:) = -(phi(2)-phi(1))*r*sin(w);
288 v(2,:) = (phi(2)-phi(1))*r*cos(w); 296 v(2,:) = (phi(2)-phi(1))*r*cos(w);
289 end 297 end
290 298
291 obj = grid.Curve(@g_fun,@g_fun_deriv); 299 obj = parametrization.Curve(@g_fun,@g_fun_deriv);
292 end 300 end
293 301
294 function obj = bezier(p0, p1, p2, p3) 302 function obj = bezier(p0, p1, p2, p3)
295 function v = g_fun(t) 303 function v = g_fun(t)
296 v(1,:) = (1-t).^3*p0(1) + 3*(1-t).^2.*t*p1(1) + 3*(1-t).*t.^2*p2(1) + t.^3*p3(1); 304 v(1,:) = (1-t).^3*p0(1) + 3*(1-t).^2.*t*p1(1) + 3*(1-t).*t.^2*p2(1) + t.^3*p3(1);
300 function v = g_fun_deriv(t) 308 function v = g_fun_deriv(t)
301 v(1,:) = 3*(1-t).^2*(p1(1)-p0(1)) + 6*(1-t).*t*(p2(1)-p1(1)) + 3*t.^2*(p3(1)-p2(1)); 309 v(1,:) = 3*(1-t).^2*(p1(1)-p0(1)) + 6*(1-t).*t*(p2(1)-p1(1)) + 3*t.^2*(p3(1)-p2(1));
302 v(2,:) = 3*(1-t).^2*(p1(2)-p0(2)) + 6*(1-t).*t*(p2(2)-p1(2)) + 3*t.^2*(p3(2)-p2(2)); 310 v(2,:) = 3*(1-t).^2*(p1(2)-p0(2)) + 6*(1-t).*t*(p2(2)-p1(2)) + 3*t.^2*(p3(2)-p2(2));
303 end 311 end
304 312
305 obj = grid.Curve(@g_fun,@g_fun_deriv); 313 obj = parametrization.Curve(@g_fun,@g_fun_deriv);
306 end 314 end
307 315
308 316
309 function [g_out,gp_out] = transform_g(g,gp,tr) 317 function [g_out,gp_out] = transform_g(g,gp,tr)
310 A = tr.A; 318 A = tr.A;