L system은 식물의 생장과정을 표현하는 틀이고 


Lindenmayer가 제안해서 L system이지 뭐 뉴턴의 3법칙 처럼 별로 이름에 큰 의미는 없어.



단순하게 자연의 식물이 생장과정, 또는 눈의 결정, 프렉탈 같은 걸 표현할때 쓰는 알고리즘 이라고 볼 수 있는데.



간단한 것 부터 해보면


기본적으로 전제를 깔고 법칙을 정하는데.


F는 정해진 길이만큼 전진 +-는 정해진 각도만큼 방향전환 한다는 뜻이고, 대괄호가 있으면 동시에 진행 한다는 뜻이다.

(3차원으로 가면 xyz, 축이 3개가 되고 시계 반시계 등 6가지로 늘어나게 됨. +,-,^,&,/,)

(F같은 변수의 경우 프로그램마다 틀리고 직접 정할 수도 있음)




viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a9d0e1593c5b45c5f013e00d7




간단하게 F만 적으면 정해진 길이 만큼 전진




viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0ac30f4ac192bd5c5b013e00d7




+ 방향으로 정해진 각도( 60도로 정했다.) 만큼 방향을 전환하고 다시 전진





viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a975a1f9295eb0c59013e00d7





이런식으로 하면 육각형이 됨 ㅇㅇ





viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a975c1dc992eb5f0f013e00d7





중간에 대괄호를 넣으면 뒤에것과 동시에 진행을 해서 활용이 무궁무진해 진다. 





viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a925b1fc1c6b5090e013e00d7




만약 +를 두번 연속으로 하게되면 정해진 각도 60도를 +방향으로 두번 돌아서 120도가 돌게 된다.



위의 삼각형을 기본 전제로 하고

법칙을 정해보자.

(angle 60)




viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a955a4fc4c6ba0d0c013e00d7



이 삼각형에

빨간색 부분을 중간에 추가하고 싶어


그부분만 보면 F-F++F-F.


F++F++F가 전제인데 그 F에 빨간색 부분만 대입하면 된다.


법칙(rule)을 F=F-F++F-F 라고 정하면 되는데.



적용을 시키면



viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0ac452149391e80f0f013e00d7




이게 한번 대입한 것이고 이걸 1세대라 부르자


저렇게 대입한 것에다 또 법칙을 대입하면 세대가 늘어나면서 계속 반복하게 되고 결과적으로




viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a945e1490c6ec055e013e00d7



눈 결정 모양이 된다. (n=7)



(하지만 이처럼 한 변의 등분까지 생각 안하면 너무 커져서 실제론 분수계산까지 해야함, 코흐의 눈송이 참고)



viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0a9d5e1bc1c1ec080c012907d6



각도 12전제 -F++F[++F]--F[++F]--F[++F]--F[++F]--F[++F]--F법칙 F=F[++F----F]--F++++F--F

viewimage.php?id=20bcc42ee0df39b267bcc5&no=29bcc427b08477a16fb3dab004c86b6f5001476229f21d3e7e462386cf996e6b697b83dc9d657a313307905d3f842f0ac75a1fc0c2bb5f5b012907d6



각도 40 전제 ++[F]++++++++[F]++++++++[F]++++++++[F]++++++++[F] 법칙 F=F[+++++FF----------FF]-----FF++++++++++FF-----F



이런식으로 프랙탈 이라고 불리는 끝없이 되풀이 되는 구조를 표현할 수 있고 (아무리 확대해도 반복, 예: 만델브로트 집합)


프랙탈에 대해 궁금한 사람은

http://youtu.be/WRMzglUxmOk

이 할아버지가 명쾌하게 설명해준다

10편까지 있으니 참고해



아무튼 꽃부터 시작해서 다양한 식물, 번개, 땅균열까지 표현 가능하고


중간에 각도나 길이를 변경할 수 도 있어서 더욱 더 복잡하게도 만들 수 있어.

(피보나치 수열, Phyllotaxis 등)



https://vimeo.com/82368946

https://vimeo.com/48496818

https://vimeo.com/49052505


비메오 태그가 안되네..



식물(포도,산삼,나뭇잎 등)같은 경우 법칙을 여러개를 주고 변수를 많이 사용하여

각도의 랜덤, 랜덤한 확률로 가지를 치고, 잎을 만들며 계속 진행할 것인지, 열매나 꽃을 피울건지 조건과 확률도 달고

끝으로 갈 수록 두께를 얇게하는 등 여러가지 설정을 통해 구현할 수 있다.



실제로 이러한 l체계는 자연과학, 생명과학으로 분류되지만 

어메이징스파이더맨2에서의 번개나, 

많은 영화(반지의 제왕 등)에서 랜덤값을 가진 수백 수천그루의 나무, 

식물이 자라나는 씬, 

땅이 갈라지는 씬 등 여러가지 형태로 영화 CG에 쓰이고.



공학도는 매트랩 같은 프로그램 많이들 배우잖아? 그걸로도 할 수 있으니 심심할때 코드를 만들어 보는것도 좋지만 사실 인생에 별 도움 안된다.



http://en.wikipedia.org/wiki/L-system