This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Penr@}~

By: a guest on May 15th, 2013  |  syntax: None  |  size: 6.47 KB  |  views: 32  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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;
clone this paste RAW Paste Data