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)