• API
• FAQ
• Tools
• Trends
• Archive
daily pastebin goal
39%
SHARE
TWEET

# Penr@}~

a guest May 15th, 2013 36 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. clc
2. close all
3. clear all
4. %~
5. %~untilable wedges for the kicks!!!~
6. %~
7. %define phi
8. P = (sqrt(5)+1)/2;
9. %define triangles below
10. %~A~1:P:1
11. %~B~P:1:P
12. %triangle A
13. TRA = [0           0;         %1~x,y
14.        P           0;         %2~x,y
15.        cos(pi/5)   sin(pi/5)];%3~x,y
16. %triangle B
17. TRB = [0           0;         %1~x,y
18.        P           0;         %2~x,y
19.        P*cos(pi/5) P*sin(pi/5)];%3~x,y
20. %setup fibinacci sequences
21. NF = 20;%not set up to ensure drawing will be completed
22. Fu = zeros(NF,1);
23. Fp = zeros(NF,1);
24. Fu(1:2) = [1 0];%`D~A~'
25. Fp(1:2) = [0 1];%,~U~T.
26. for q = 3:NF
27.     Fu(q) = Fu(q-1)+Fu(q-2);
28.     Fp(q) = Fp(q-1)+Fp(q-2);
29. end
30. %set up drawing scale
31. SC = 4;%number of blocks to draw~
32. %~make sure you print long enough series
33. %figure number
34. figNum = 1;
35. dF = 1;%0~lines,1~filled
36. %draw seed triangle
37. figNum = drawTri(TRB,0,[0,0],0,figNum,0,SC,dF);
38.
39. for j = 1:SC
40.     scale = zeros(j,1);%scaling factor per level
41.     N_C = zeros(j,1);%number of bins
42.     type = cell(j,1);
43.     alph = cell(j,1);
44.     xOff = cell(j,1);
45.     yOff = cell(j,1);
46.     perm = cell(j,1);
47.     for n = 1:j
48.         %scale step
49.         q = j-n+1;
50.         %cell number
51.         Ncell = (2*n+1);
52.         %grab scale of the level
53.         scale(n) = Fu(q)+P*Fp(q);
54.         %set up cell count
55.         N_C(n) = Fu(Ncell)+Fp(Ncell);
56.         %setup triangle type table
57.         type{n} = zeros(N_C(n),1);
58.         %update type numbers
59.         num = 1;
60.         if n == 1
61.             %first triangle A
62.             type{n}(1,1) = 1;
63.             alph{n}(1,1) = 4*pi/5;
64.             xOff{n}(1,1) = scale(n)*P+scale(n);
65.             yOff{n}(1,1) = 0;
66.             perm{n}(1,1) = 0;
67.             %second triangle B
68.             type{n}(2,1) = 2;
69.             alph{n}(2,1) = 3*pi/5;
70.             xOff{n}(2,1) = scale(n)*P+scale(n);
71.             yOff{n}(2,1) = 0;
72.             perm{n}(2,1) = 0;
73.         else
74.             for i = 1:N_C(n-1)
75.                 if type{n-1}(i) == 1
76.                     %A-A
77.                     ANG = alph{n-1}(i);
78.                     ROT = [cos(ANG) -sin(ANG);
79.                            sin(ANG)  cos(ANG)];
80.                     type{n}(num,1) = 1;
81.                     alph{n}(num,1) = alph{n-1}(i)+4*pi/5;
83.                                       0];
87.                     perm{n}(num,1) = 0;
88.                     num = num + 1;
89.                     %A-B
90.                     type{n}(num,1) = 2;
91.                     alph{n}(num,1) = alph{n-1}(i);
93.                                     0];
97.                     perm{n}(num,1) = 0;
98.                     num = num + 1;
99.                 else
100.                     ANG = alph{n-1}(i);
101.                     ROT = [cos(ANG+pi/5) -sin(ANG+pi/5);
102.                            sin(ANG+pi/5)  cos(ANG+pi/5)];
103.                     %B-A
104.                     type{n}(num,1) = 1;
105.                     alph{n}(num,1) = alph{n-1}(i)-4*pi/5;
107.                                     0];
111.                     perm{n}(num,1) = 0;
112.                     num = num + 1;
113.                     %B-B1
114.                     ROT = [cos(ANG) -sin(ANG);
115.                            sin(ANG)  cos(ANG)];
116.                     type{n}(num,1) = 2;
117.                     alph{n}(num,1) = alph{n-1}(i)+3*pi/5;
119.                                       0];
123.                     perm{n}(num,1) = 0;
124.                     num = num + 1;
125.                     %B-B2
126.                     type{n}(num,1) = 2;
127.                     alph{n}(num,1) = alph{n-1}(i)+4*pi/5;
129.                                       0];
133.                     perm{n}(num,1) = 0;
134.                     num = num + 1;
135.                 end
136.             end
137.         end
138.         if n == j
139.             %draw triangles
140.             for i = 1:N_C(n)
141.                 angA = alph{n}(i);
142.                 dOff = [xOff{n}(i) yOff{n}(i)];
143.                 Prm = perm{n}(i);
144.                 tp = type{n}(i);
145.                 if tp == 1
146.                     figNum = drawTri(TRA,angA,dOff,Prm,figNum,n,SC,dF);
147.                 elseif tp == 2
148.                     figNum = drawTri(TRB,angA,dOff,Prm,figNum,n,SC,dF);
149.                 end
150.             end
151.         end
152.     end
153. end
154.
155.
156. function [figNum] = drawTri(drawTri,drawAngle,drawOff,Pm,figNum,n,SC,dF)
157. %rotate sides
158. R = [cos(drawAngle) -sin(drawAngle);
159.      sin(drawAngle)  cos(drawAngle)];
160. drawTri(2,:) = drawTri(2,:)*R';
161. drawTri(3,:) = drawTri(3,:)*R';
162. %apply offset
163. drawTri(:,1) = drawTri(:,1) + drawOff(1);
164. drawTri(:,2) = drawTri(:,2) + drawOff(2);
165. %drawing table
166. drawX = zeros(3,10);
167. drawY = zeros(3,10);
168. for q = 1:10
169.     ROT = [cos(q*pi/5) -sin(q*pi/5);
170.            sin(q*pi/5)  cos(q*pi/5)];
171.     vectA = drawTri(1,:)*ROT';
172.     vectB = drawTri(2,:)*ROT';
173.     vectC = drawTri(3,:)*ROT';
174.     vect = [vectA;vectB;vectC];
175.     drawX(:,q) = vect(:,1);
176.     drawY(:,q) = vect(:,2);
177. end
178. %color scheme
179. if SC == 1
180.     PF1 = 0;
181.     PF2 = 1;
182. else
183.     PF1 = sin(pi/2*n/SC);
184.     PF2 = sin(pi/2*n/SC+pi/2);
185. end
186. FCT = 1/sqrt(2);
187. %draw triangle
188. figure(figNum)
189. hold on
190. for q = 1:10
191.     for n = 1:3
192.         if n == 1
193.             plx = [drawX(1,q) drawX(2,q)];
194.             ply = [drawY(1,q) drawY(2,q)];
195.         elseif n == 2
196.             plx = [drawX(2,q) drawX(3,q)];
197.             ply = [drawY(2,q) drawY(3,q)];
198.         else
199.             plx = [drawX(3,q) drawX(1,q)];
200.             ply = [drawY(3,q) drawY(1,q)];
201.         end
202.         if dF == 0
203.             plot(plx,ply,'linewidth',2,'color',[(PF1+PF2) PF1 PF2])
204.         else
205.             fill(drawX(:,q),drawY(:,q),[FCT*(PF1+PF2) PF1 PF2])
206.         end
207.     end
208. end
209. axis equal
210. grid on
211.
212. figNum = figNum;
RAW Paste Data
Top