un petit code rapide qui génère un arbre de Pythagore (Pythagoras Tree en anglais) pour un nombre d'itérations donné :
et une fonction permettant d'afficher cet arbre pour un nombre d'itérations donné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 function [v,th,L] = pythagorastree(N) %PYTHAGORASTREE % % % Author : Jerome Briot (Dut) % Contact : dutmatlab#yahoo#fr -or- briot#cict#fr % Profil : www.mathworks.com/matlabcentral/newsreader/author/94805 % : www.developpez.net/forums/u125006/dut/ % % Version : 1.0 - 07 Sep 2009 % % MATLAB : 7.6.0.324 (R2008a) % System : Linux 2.6.24-24-generic % error(nargchk(1,1,nargin)); a = sqrt(2)/2; xy = [0 -a 0 a 2*a 3*a 2*a; 0 a 2*a a 2*a a 0].'; v{1} = [-.5 1]; th{1} = 0; L = ones(1,N+1); for n = 1:N L(n+1) = a; xy = xy*L(n+1); for q = 1:size(v{n},1) temp = [xy ones(size(xy,1),1)] * [cos(th{n}(q)) sin(th{n}(q)) 0 ; -sin(th{n}(q)) cos(th{n}(q)) 0 ; v{n}(q,:) 1]; v{n+1}((q-1)*2+1,:) = temp(2,1:2); v{n+1}(2*q,:) = temp(5,1:2); th{n+1}((q-1)*2+1) = th{n}(q)+pi/4; th{n+1}(2*q) = th{n}(q)+-pi/4; end end
Voila... si vous avez des remarques, des questions ou des suggestions, n'hésitez pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 function drawpythagorastree(N) %DRAWPYTHAGORASTREE % % % Author : Jerome Briot (Dut) % Contact : dutmatlab#yahoo#fr -or- briot#cict#fr % Profil : www.mathworks.com/matlabcentral/newsreader/author/94805 % : www.developpez.net/forums/u125006/dut/ % % Version : 1.0 - 07 Sep 2009 % % MATLAB : 7.6.0.324 (R2008a) % System : Linux 2.6.24-24-generic % if nargin == 0 N = 10; end [v,th,L] = pythagorastree(N); a = sqrt(2)/2; xy = [0 -a 0 a 2*a 3*a 2*a; 0 a 2*a a 2*a a 0].'; col = flipud(summer(N+1)); figure('color','w','numbertitle','off') vertices = [-.5 .5 .5 -.5 ; 0 0 1 1].'; patch('vertices',vertices,'faces',1:4,'facecolor',col(1,:),'edgecolor',col(1,:)); hold on for n = 1:N xy = xy*L(n+1); for q = 1:size(v{n},1) temp = [xy ones(size(xy,1),1)] * [cos(th{n}(q)) sin(th{n}(q)) 0 ; -sin(th{n}(q)) cos(th{n}(q)) 0 ; v{n}(q,:) 1]; patch('vertices',temp,'faces',[1:7 4],'facecolor',col(n+1,:),'edgecolor',col(n+1,:)); end end str = sprintf('Pythagoras Tree (%d iterations)',N); title(str) axis equal off
Mais rappelez-vous que je ne suis pas un spécialiste dans ce domaine
Note : Ne sachant pas si ces codes sont justes, je ne les ai pas optimisés (et donc pas commentés)
Partager