construisons la courbe de Koch et le flocon de Koch (Koch curve and snowflake) :
Les variables sx et sy sont des vecteurs contenant les coordonnées du polygone de départ
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 function [x,y] = Kochcurve(sx,sy,N) %KOCHCURVE % % % 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 = 4; end X = [0;1/3;1/2;2/3;1]; Y = [0;0;sqrt(3)/6;0;0]; x{1} = sx; y{1} = sy; for n=1:N for k =1:numel(x{n})-1 th = atan2((y{n}(k+1)-y{n}(k)),(x{n}(k+1)-x{n}(k))); d = sqrt((y{n}(k+1)-y{n}(k))^2+(x{n}(k+1)-x{n}(k))^2); temp = [d*X(:) d*Y(:) ones(numel(X),1)] * [cos(th) sin(th) 0 ; -sin(th) cos(th) 0 ; x{n}(k) y{n}(k) 1]; x{n+1}((k-1)*5+1:k*5) = temp(:,1); y{n+1}((k-1)*5+1:k*5) = temp(:,2); end x{n+1}(6:5:end) = []; y{n+1}(6:5:end) = []; end
Soit pour la courbe de Koch :
Et pour le flocon de Koch :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sx = [0;1] sy = [0;0];
Une petite fonction pour tracer tout ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sx{2} = [0;.5;1;0]; sy{2} = [0;sqrt(3)/2;0;0];
Et une petite demo :
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 function p = drawKochcurve(x,y) %DRAWKOCHCURVE % % % 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 % figure('color','w') p = plot(nan,nan); axis equal off for k = 1:numel(x) set(p,'xdata',x{k} ,'ydata',y{k}) pause(1) 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 function demoKochcurve(n) %DEMOKOCHCURVE % % % 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 = 1; end % Koch curve sx{1} = [0;1]; sy{1} = [0;0]; % Koch snowflake sx{2} = [0;.5;1;0]; sy{2} = [0;sqrt(3)/2;0;0]; N = 4; [x,y] = Kochcurve(sx{n},sy{n},N); drawKochcurve(x,y);
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