L-SYSTEM 을 활용한 프랙탈
L-시스템을 이용해서 여러가지 멋진 프랙탈을 그려보도록 하자. 다음과 같이 변환 규칙, 공리 를 말하면 그에 맞게 코드로 설정하면 된다.
변 환 : F -> F+F--F+F
공 리 : F
lsystem.AddTransRule('F', "F+F--F+F");
lsystem.MakeAxiom("F");
이 강좌에서는 따로 실행파일은 제공하지 않고 실행 결과의 그림과 변환 규칙, 공리만을 적는다.
코호섬

변환
F -> F-F+F+FF-F-F+F
공리
F-F-F-F
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "F-F+F+FF-F-F+F");
lsystem.MakeAxiom("F-F-F-F", 3);
시어핀스키 사각형

변환
F -> FF-F-F-F-FF
공리
F-F-F-F
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF-F-F-F-FF");
lsystem.MakeAxiom("F-F-F-F", 3);
시어핀스키 가스켓

변환
F -> FF
변환
X -> ++FXF--FXF--FXF++
공리
FXF++FF++FF
각도
60 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(60.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF");
lsystem.AddTransRule('X', "++FXF--FXF--FXF++");
lsystem.MakeAxiom("FXF++FF++FF", 4);
힐버트 곡선

변환
F -> F
변환
X -> +YF-XFX-FY+
변환
Y -> -XF+YFY+FX-
공리
X
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
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]
공리
F
각도
30 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(30.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF+[+F-F-F]-[-F+F+F]");
lsystem.MakeAxiom("F", 4);
열매를 맺는 나무

변환
F -> FF+[+F-F-F@]-[-F+F+F@]
공리
F
각도
30 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(30.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF+[+F-F-F@]-[-F+F+F@]");
lsystem.MakeAxiom("F", 4);
드래곤 곡선

변환
F -> F
변환
X -> X-YF-
변환
Y -> +FX+Y
공리
X
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "F");
lsystem.AddTransRule('X', "X-YF-");
lsystem.AddTransRule('Y', "+FX+Y");
lsystem.MakeAxiom("X", 10);
네모 곡선

변환
F -> FF-F-F-F-F-F+F
공리
F-F-F-F-
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF-F-F-F-F-F+F");
lsystem.MakeAxiom("F-F-F-F-", 3);
무궁화

변환
F -> F++F++F
F-F++F
공리
F++F++F++F++F
각도
36 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(36.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
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
공리
F
각도
30 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(30.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "F[+F[+F][-F]F][-F[+F][-F]F]F[+F][-F]F");
lsystem.MakeAxiom("F", 3);
시어핀스키 곡선

변환
F -> F
변환
X -> YF+XF+Y
변환
Y -> XF-YF-X
공리
YF
각도
60 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(60.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "F");
lsystem.AddTransRule('X', "YF+XF+Y");
lsystem.AddTransRule('Y', "XF-YF-X");
lsystem.MakeAxiom("YF", 6);
시어핀스키 삼각형

변환
F -> FXF
변환
X -> +FXF-FXF-FXF+
공리
XF
각도
120 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(120.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FXF");
lsystem.AddTransRule('X', "+FXF-FXF-FXF+");
lsystem.MakeAxiom("XF", 5);
눈송이

변환
F -> "" 아무런 문자로도 전재하지 않음
변환
L -> FL-FR--FR+FL++FLFL+FR-
변환
R -> +FL-FRFR--FR-FL++FL+FR
공리
FL
각도
60 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(60.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
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);
페아노 곡선

변환
F -> F
변환
X -> XFYFX-F-YFXFY+F+XFYFX
변환
Y -> YFXFY+F+XFYFX-F-YFXFY
공리
X
각도
90 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(90.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
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]
공리
F
각도
26 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(26.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF+[F+FF-F]-[+F+F-F]");
lsystem.MakeAxiom("F", 4);
나무

변환
F -> FF+[+F-F-F]-[-FFF]
공리
F
각도
26 도
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(26.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
lsystem.AddTransRule('F', "FF+[+F-F-F]-[-FFF]");
lsystem.MakeAxiom("F", 4);
선인장

변환
F -> F
변환
S -> [++G][--G]TTS
변환
G -> +H[-G]L
변환
H -> -G[+HF]FL
변환
T -> TL
변환
L -> [-FFF][+FFF]F
공리
SLFFF
각도
18 도
코드
lsystem.SelectTurtle(&turtle);
lsystem.SetAngle(18.0f);
lsystem.SetLength(1.0f);
lsystem.SetFactor(1.0f);
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-시스템이 원하는 그림을 화면에 뿌려낼 때에는 한동안 무아지경에서 빠져 나오지 못할 것이다. ;] - 끝 -
Last updated
Was this helpful?