3 pièce(s) jointe(s)
[Fractales 4/5] Courbe et flocon de Koch - Koch curve and snowflake
:salut:
construisons la courbe de Koch et le flocon de Koch (Koch curve and snowflake) :
Code:
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 |
Les variables sx et sy sont des vecteurs contenant les coordonnées du polygone de départ
Soit pour la courbe de Koch :
Et pour le flocon de Koch :
Code:
1 2
| sx{2} = [0;.5;1;0];
sy{2} = [0;sqrt(3)/2;0;0]; |
Une petite fonction pour tracer tout ça :
Code:
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 |
Et une petite demo :
Code:
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); |
Voila... si vous avez des remarques, des questions ou des suggestions, n'hésitez pas :ccool:
Mais rappelez-vous que je ne suis pas un spécialiste dans ce domaine :aie:
Note : Ne sachant pas si ces codes sont justes, je ne les ai pas optimisés (et donc pas commentés) :wink:
Besoin d'un petit coup de main
Bonjour
je veux creer un flocon de koch et ca marche bien avec votre code mais j'aimerais bien comprendre chaque etape du code
est ce que vous pourriez m'aide s'il vous plait?