Mercurial > repos > public > sbplib
comparison +grid/old/triang_interp.m @ 0:48b6fb693025
Initial commit.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 17 Sep 2015 10:12:50 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:48b6fb693025 |
---|---|
1 classdef triang_interp | |
2 properties | |
3 g1, g2 ,g3 % Curves encirling the tirangle in the positive direction. | |
4 A,B,C % The corners of the triangle | |
5 Sa, Sb, Sc % Mappings from square with different sides collapsed | |
6 end | |
7 | |
8 methods | |
9 function o = triang_interp(g1,g2,g3) | |
10 o.g1 = g1; | |
11 o.g2 = g2; | |
12 o.g3 = g3; | |
13 o.A = g1(0); | |
14 o.B = g2(0); | |
15 o.C = g3(0); | |
16 o.Sa = grid.triang_interp.square_to_triangle_interp(g2,g3,g1); | |
17 o.Sb = grid.triang_interp.square_to_triangle_interp(g3,g1,g2); | |
18 o.Sc = grid.triang_interp.square_to_triangle_interp(g1,g2,g3); | |
19 end | |
20 | |
21 | |
22 function show(o,N) | |
23 % Show the mapped meridians of the triangle. | |
24 % Might be used for the barycentric coordinates. | |
25 ma = @(t)o.Sa(1/2,1-t); | |
26 mb = @(t)o.Sb(1/2,1-t); | |
27 mc = @(t)o.Sc(1/2,1-t); | |
28 | |
29 na = @(t)o.Sa(t,1/2); | |
30 | |
31 ka = @(t)(o.g1(1-t)+o.g2(t))/2; | |
32 | |
33 h = grid.plot_curve(ma); | |
34 h.Color = Color.blue; | |
35 h = grid.plot_curve(mb); | |
36 h.Color = Color.blue; | |
37 h = grid.plot_curve(mc); | |
38 h.Color = Color.blue; | |
39 | |
40 h = grid.plot_curve(na); | |
41 h.Color = Color.red; | |
42 | |
43 h = grid.plot_curve(ka); | |
44 h.Color = Color.red; | |
45 | |
46 [a(1),a(2)] = ma(1/3); | |
47 [b(1),b(2)] = mb(1/3); | |
48 [c(1),c(2)] = mc(1/3); | |
49 | |
50 d = ka(1-1/3); | |
51 | |
52 | |
53 grid.label_pt(a,b,c,d); | |
54 | |
55 | |
56 % t = linspace(0,1,N); | |
57 % for i = 1:N | |
58 % sa = @(s)o.Sa(s,t(i)); | |
59 % sb = @(s)o.Sb(s,t(i)); | |
60 % sc = @(s)o.Sc(s,t(i)); | |
61 | |
62 % h = grid.plot_curve(sa); | |
63 % h.Color = Color.blue; | |
64 % h = grid.plot_curve(sb); | |
65 % h.Color = Color.blue; | |
66 % h = grid.plot_curve(sc); | |
67 % h.Color = Color.blue; | |
68 % end | |
69 | |
70 h = grid.plot_curve(o.g1); | |
71 h.LineWidth = 2; | |
72 h.Color = Color.red; | |
73 | |
74 h = grid.plot_curve(o.g2); | |
75 h.LineWidth = 2; | |
76 h.Color = Color.red; | |
77 | |
78 h = grid.plot_curve(o.g3); | |
79 h.LineWidth = 2; | |
80 h.Color = Color.red; | |
81 | |
82 end | |
83 | |
84 | |
85 end | |
86 | |
87 methods(Static) | |
88 % Makes a mapping from the unit square to a triangle by collapsing | |
89 % one of the sides of the squares to a corner on the triangle | |
90 % The collapsed side is mapped to the corner oposite to g1. | |
91 % This is done such that for S(s,t), S(s,1) = g1(s) | |
92 function S = square_to_triangle_interp(g1,g2,g3) | |
93 corner = grid.line_segment(g3(0),g3(0)); | |
94 S = grid.transfinite_interp(corner,g3,f(g1),f(g2)) | |
95 | |
96 % Function to flip a curve | |
97 function h = f(g) | |
98 h = @(t)g(1-t); | |
99 end | |
100 end | |
101 end | |
102 | |
103 end | |
104 | |
105 % % Return a mapping from u.v to x,y of the domain encircled by g1 g2 g3 in the the positive direction. created be using transfinite interpolation. | |
106 % function S = triang_interp(g1,g2,g3) | |
107 % A = g1(0) | |
108 % B = g2(0) | |
109 % C = g3(0) | |
110 | |
111 % function [x,y] = S_fun(u,v) | |
112 % w = sqrt((u-1)^2+v^2)/sqrt(2); % Parameter for g3 | |
113 % v = v*(1-u-v)*g1(u) + u*(1-u-v)*g2(v) + u*v*g3(w) ... | |
114 % +(1-u)*(1-v)*A+u*(1-v)*B + (1-u)*v*C; | |
115 % x = v(1); | |
116 % y = v(2); | |
117 % end | |
118 % S = @S_fun; | |
119 % end | |
120 | |
121 | |
122 | |
123 % function subsref(obj,S) | |
124 % if ~all(isnumeric(S.subs{:})) | |
125 % error('Only supports calling object with number') | |
126 % end | |
127 % if numel(S.subs{:}) > 1 | |
128 % disp('You''ve called the object with more than one argument'); | |
129 % else | |
130 % disp(['You called the object with argument = ',num2str(S.subs{:})]); | |
131 % end | |
132 % end |