Advertisement
Guest User

Penr@}~

a guest
May 15th, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 KB | None | 0 0
  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;
  82. RAD = [P*scale(n-1);
  83. 0];
  84. RAD = ROT*RAD;
  85. xOff{n}(num,1) = RAD(1)+xOff{n-1}(i);
  86. yOff{n}(num,1) = RAD(2)+yOff{n-1}(i);
  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);
  92. RAD = [ 0;
  93. 0];
  94. RAD = ROT*RAD;
  95. xOff{n}(num,1) = RAD(1)+xOff{n-1}(i);
  96. yOff{n}(num,1) = RAD(2)+yOff{n-1}(i);
  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;
  106. RAD = [scale(n-1);
  107. 0];
  108. RAD = ROT*RAD;
  109. xOff{n}(num,1) = RAD(1)+xOff{n-1}(i);
  110. yOff{n}(num,1) = RAD(2)+yOff{n-1}(i);
  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;
  118. RAD = [scale(n-1)*P;
  119. 0];
  120. RAD = ROT*RAD;
  121. xOff{n}(num,1) = RAD(1)+xOff{n-1}(i);
  122. yOff{n}(num,1) = RAD(2)+yOff{n-1}(i);
  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;
  128. RAD = [scale(n-1)*P;
  129. 0];
  130. RAD = ROT*RAD;
  131. xOff{n}(num,1) = RAD(1)+xOff{n-1}(i);
  132. yOff{n}(num,1) = RAD(2)+yOff{n-1}(i);
  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;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement