algorytm.org

Implementacja w Scilab



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

L-systemy - Implementacja w Scilab
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
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)

Dodaj komentarz