L-시스템을 이용해서 여러가지 멋진 프랙탈을 그려보도록 하자. 다음과 같이 변환 규칙, 공리 를 말하면 그에 맞게 코드로 설정하면 된다.
Copy 변 환 : F -> F + F -- F + F
공 리 : F
lsystem. AddTransRule ( 'F' , "F+F--F+F" );
lsystem. MakeAxiom ( "F" );
이 강좌에서는 따로 실행파일은 제공하지 않고 실행 결과의 그림과 변환 규칙, 공리만을 적는다.
코호섬
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F-F+F+FF-F-F+F" );
lsystem . MakeAxiom ( "F-F-F-F" , 3 );
시어핀스키 사각형
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF-F-F-F-FF" );
lsystem . MakeAxiom ( "F-F-F-F" , 3 );
시어핀스키 가스켓
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 60.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF" );
lsystem . AddTransRule ( 'X' , "++FXF--FXF--FXF++" );
lsystem . MakeAxiom ( "FXF++FF++FF" , 4 );
힐버트 곡선
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F" );
lsystem . AddTransRule ( 'X' , "+YF-XFX-FY+" );
lsystem . AddTransRule ( 'Y' , "-XF+YFY+FX-" );
lsystem . MakeAxiom ( "X" , 4 );
나무
F -> FF+[+F-F-F]-[-F+F+F]
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 30.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF+[+F-F-F]-[-F+F+F]" );
lsystem . MakeAxiom ( "F" , 4 );
열매를 맺는 나무
F -> FF+[+F-F-F@]-[-F+F+F@]
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 30.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF+[+F-F-F@]-[-F+F+F@]" );
lsystem . MakeAxiom ( "F" , 4 );
드래곤 곡선
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F" );
lsystem . AddTransRule ( 'X' , "X-YF-" );
lsystem . AddTransRule ( 'Y' , "+FX+Y" );
lsystem . MakeAxiom ( "X" , 10 );
네모 곡선
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF-F-F-F-F-F+F" );
lsystem . MakeAxiom ( "F-F-F-F-" , 3 );
무궁화
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 36.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F++F++F|F-F++F" );
lsystem . MakeAxiom ( "F++F++F++F++F" , 3 );
나무
F -> F[+F[+F][-F]F][-F[+F][-F]F]F[+F][-F]F
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 30.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F[+F[+F][-F]F][-F[+F][-F]F]F[+F][-F]F" );
lsystem . MakeAxiom ( "F" , 3 );
시어핀스키 곡선
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 60.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F" );
lsystem . AddTransRule ( 'X' , "YF+XF+Y" );
lsystem . AddTransRule ( 'Y' , "XF-YF-X" );
lsystem . MakeAxiom ( "YF" , 6 );
시어핀스키 삼각형
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 120.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FXF" );
lsystem . AddTransRule ( 'X' , "+FXF-FXF-FXF+" );
lsystem . MakeAxiom ( "XF" , 5 );
눈송이
L -> FL-FR--FR+FL++FLFL+FR-
R -> +FL-FRFR--FR-FL++FL+FR
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 60.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "" );
lsystem . AddTransRule ( 'L' , "FL-FR--FR+FL++FLFL+FR-" );
lsystem . AddTransRule ( 'R' , "+FL-FRFR--FR-FL++FL+FR" );
lsystem . MakeAxiom ( "FL" , 3 );
페아노 곡선
X -> XFYFX-F-YFXFY+F+XFYFX
Y -> YFXFY+F+XFYFX-F-YFXFY
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 90.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F" );
lsystem . AddTransRule ( 'X' , "XFYFX-F-YFXFY+F+XFYFX" );
lsystem . AddTransRule ( 'Y' , "YFXFY+F+XFYFX-F-YFXFY" );
lsystem . MakeAxiom ( "X" , 3 );
갈대
F -> FF+[F+FF-F]-[+F+F-F]
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 26.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF+[F+FF-F]-[+F+F-F]" );
lsystem . MakeAxiom ( "F" , 4 );
나무
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 26.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "FF+[+F-F-F]-[-FFF]" );
lsystem . MakeAxiom ( "F" , 4 );
선인장
코드
Copy lsystem . SelectTurtle ( & turtle);
lsystem . SetAngle ( 18.0 f );
lsystem . SetLength ( 1.0 f );
lsystem . SetFactor ( 1.0 f );
lsystem . AddTransRule ( 'F' , "F" );
lsystem . AddTransRule ( 'S' , "[++G][--G]TTS" );
lsystem . AddTransRule ( 'G' , "+H[-G]L" );
lsystem . AddTransRule ( 'H' , "-G[+HF]FL" );
lsystem . AddTransRule ( 'T' , "TL" );
lsystem . AddTransRule ( 'L' , "[-FFF][+FFF]F" );
lsystem . MakeAxiom ( "SLFFF" , 9 );
이곳에서 설명한 L-시스템 이외에도 자신이 L-시스템을 만들어 볼 수 있다. L-시스템의 모형을 만들고 이에 대한 공리, 변환, 각도를 정해주면 된다. 자신이 설계한 L-시스템이 원하는 그림을 화면에 뿌려낼 때에는 한동안 무아지경에서 빠져 나오지 못할 것이다. ;] - 끝 -