Nadesłany przez Krzysztof Bruszewski, 09 marca 2013 00:51
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
l_systemy.sci:
//L-Systemy
//www.algorytm.org
aksjomat=['F','+','+','F','+','+','F'];
regula_F=['F','-','F','+','+','F','-','F'];
katf=60;
iter=5;
function [lista]=LSystem(aksjomat, regula_F,nIteracji)
lista=[aksjomat];
for n = 1 : nIteracji;
t=size(lista);
size_lista=t(2);
n_lista=[];
for i = 1 : size_lista;
if lista(i)=='F' then
n_lista=[n_lista,regula_F];
else
n_lista=[n_lista,lista(i)];
end
end
lista=n_lista;
disp(size(lista));
n_lista=[];
end
endfunction
kat=60;
ini_kat=0;
x1=0;
y1=0;
x2=x1;
y2=y1;
krok=10;
wektor_x=[];
wektor_y=[];
function [wektor_x,wektor_y]=LSys2Wektor(lista,x_start,y_start,kat_start,kat,krok)
next_kat=kat_start;
t=size(lista);
size_lista=t(2);
wektor_x=[x_start];
wektor_y=[y_start];
x=x_start;
y=x_start;
x_sav=x;
y_sav=y;
kat_sav=next_kat;
for i = 1 : size_lista;
if lista(i)=='-' then
next_kat=next_kat-kat;
elseif lista(i)=='+' then
next_kat=next_kat+kat;
elseif lista(i)=='F' then
dx=krok*cos((-next_kat*%pi)/180);
dy=krok*sin((-next_kat*%pi)/180);
x=x+dx;
y=y+dy;
wektor_x=[wektor_x,x];
wektor_y=[wektor_y,y];
elseif lista(i)=='[' then
x_sav=x;
y_sav=y;
kat_sav=next_kat;
elseif lista(i)==']' then
x=x_sav;
y=y_sav;
next_kat=kat_sav;
else
end
end
endfunction
ls=LSystem(aksjomat,regula_F,iter);
[wektor_x,wektor_y]=LSys2Wektor(ls,0,0,0,katf,20);
plot2d(wektor_x,wektor_y)

