diff +parametrization/Ti.m @ 425:e56dbd9e4196 feature/grids

Merge feature/beams
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 07 Feb 2017 16:09:02 +0100
parents 875386d0b2ff
children 433ccb5d2f0f
line wrap: on
line diff
--- a/+parametrization/Ti.m	Tue Feb 07 15:47:51 2017 +0100
+++ b/+parametrization/Ti.m	Tue Feb 07 16:09:02 2017 +0100
@@ -36,6 +36,8 @@
             obj.S = @S_fun;
         end
 
+        % Does this funciton make sense?
+        % Should it always be eval?
         function [X,Y] = map(obj,u,v)
             default_arg('v',u);
 
@@ -65,6 +67,19 @@
             end
         end
 
+        % Evaluate S for each pair of u and v,
+        % Return same shape as u
+        function [x, y] = eval(obj, u, v)
+            x = zeros(size(u));
+            y = zeros(size(u));
+
+            for i = 1:numel(u)
+                p = obj.S(u(i), v(i));
+                x(i) = p(1,:);
+                y(i) = p(2,:);
+            end
+        end
+
         function h = plot(obj,nu,nv)
             S = obj.S;
 
@@ -119,7 +134,7 @@
                 new_gs{i} = gs{i}.translate(a);
             end
 
-            ti = grid.Ti(new_gs{:});
+            ti = parametrization.Ti(new_gs{:});
         end
 
         % Mirrors the Ti so that the resulting Ti is still left handed.
@@ -134,7 +149,7 @@
             new_gs{2} = gs{4}.mirror(a,b).reverse();
             new_gs{4} = gs{2}.mirror(a,b).reverse();
 
-            ti = grid.Ti(new_gs{:});
+            ti = parametrization.Ti(new_gs{:});
         end
 
         function ti = rotate(obj,a,rad)
@@ -144,7 +159,7 @@
                 new_gs{i} = gs{i}.rotate(a,rad);
             end
 
-            ti = grid.Ti(new_gs{:});
+            ti = parametrization.Ti(new_gs{:});
         end
 
         function ti = rotate_edges(obj,n);
@@ -153,18 +168,35 @@
                 new_i = mod(i - n,4);
                 new_gs{new_i+1} = obj.gs{i+1};
             end
-            ti = grid.Ti(new_gs{:});
+            ti = parametrization.Ti(new_gs{:});
         end
     end
 
     methods(Static)
         function obj = points(p1, p2, p3, p4)
-            g1 = grid.Curve.line(p1,p2);
-            g2 = grid.Curve.line(p2,p3);
-            g3 = grid.Curve.line(p3,p4);
-            g4 = grid.Curve.line(p4,p1);
+            g1 = parametrization.Curve.line(p1,p2);
+            g2 = parametrization.Curve.line(p2,p3);
+            g3 = parametrization.Curve.line(p3,p4);
+            g4 = parametrization.Curve.line(p4,p1);
+
+            obj = parametrization.Ti(g1,g2,g3,g4);
+        end
 
-            obj = grid.Ti(g1,g2,g3,g4);
+        % Like the constructor but allows inputing line curves as 2-cell arrays:
+        %     example: parametrization.Ti.linesAndCurves(g1, g2, {a, b} g4)
+        function obj = linesAndCurves(C1, C2, C3, C4)
+            C = {C1, C2, C3, C4};
+            c = cell(1,4);
+
+            for i = 1:4
+                if ~iscell(C{i})
+                    c{i} = C{i};
+                else
+                    c{i} = parametrization.Curve.line(C{i}{:});
+                end
+            end
+
+            obj = parametrization.Ti(c{:});
         end
 
         function label(varargin)
@@ -190,11 +222,11 @@
 
 
                 ti.show(2,2);
-                grid.place_label(pc,str);
-                grid.place_label(pw,'w');
-                grid.place_label(pe,'e');
-                grid.place_label(ps,'s');
-                grid.place_label(pn,'n');
+                parametrization.place_label(pc,str);
+                parametrization.place_label(pw,'w');
+                parametrization.place_label(pe,'e');
+                parametrization.place_label(ps,'s');
+                parametrization.place_label(pn,'n');
             end
         end
     end