맨위로가기

L-system

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

L-system은 생물학자 아리스티드 린덴마이어가 개발한, 재귀성을 기반으로 하는 형식 문법으로, 주로 단세포 및 다세포 생물의 성장 패턴을 모델링하기 위해 개발되었다. L-system은 자기 유사 도형, 프랙탈 도형, 식물, 인공 생명체 생성 등 다양한 분야에 응용되며, 튜플로 정의되는 문법 구조를 갖는다. L-system은 확률적, 문맥 의존적, 파라메트릭 등 다양한 확장 형태가 존재하며, 그래픽 응용 분야에서 문자열을 도형으로 변환하여 사용된다. L-system과 관련된 미해결 문제들이 있으며, 다양한 차원에서 정의되고 있다.

더 읽어볼만한 페이지

  • 컴퓨터 그래픽스 알고리즘 - 알파 합성
    알파 합성은 이미지의 투명도를 표현하고 합성하는 기술로, 알파 채널을 사용하여 투명도 정보를 저장하고 스트레이트 알파와 프리멀티플라이드 알파 방식으로 이미지를 합성하며, PNG, TIFF, GIF 등 다양한 이미지 형식이 이를 지원한다.
  • 컴퓨터 그래픽스 알고리즘 - 클리어타입
    클리어타입은 마이크로소프트에서 개발한 서브픽셀 렌더링 기술로, LCD와 같은 평판 모니터에서 텍스트 가독성을 향상시키기 위해 픽셀을 구성하는 서브픽셀을 개별적으로 제어하여 글꼴의 앤티에일리어싱 효과를 개선하고 텍스트를 더 부드럽게 보이도록 하는 기술이다.
  • 프랙탈 - 브라운 운동
    브라운 운동은 액체나 기체 속 미세 입자가 매질 분자와 충돌하여 불규칙하게 움직이는 현상으로, 아인슈타인과 스몰루호프스키의 이론적 설명과 페랭의 실험적 검증을 통해 원자 존재 입증에 기여했으며, 확산/랑주뱅 방정식으로 모델링되어 다양한 분야에 응용된다.
  • 프랙탈 - 프랙탈 우주론
    프랙탈 우주론은 우주의 구조가 프랙탈 기하학적 특성을 갖는다는 이론이며, 관측 결과는 우주가 균질하다는 것을 보여주지만, 이론적 연구에서는 큰 규모나 미시적 규모에서 프랙탈 구조를 제안하기도 한다.
  • 형식 언어 - 문자열
    문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다.
  • 형식 언어 - 튜링 기계
    튜링 기계는 앨런 튜링이 제시한 계산 모델로, 테이프 위에서 기계적으로 작동하며, 유한한 상태, 테이프, 헤드, 명령 표를 통해 작동하고, 계산 가능성과 알고리즘의 한계를 연구하는 데 사용된다.
L-system

2. 기원

3D L-system을 사용하여 생성된 '잡초'


L-system으로 생성된 3차원 나무 모델.


생물학자였던 린덴마이어는 효모곰팡이(사상균), 그리고 남세균(시아노박테리아)의 일종인 ''Anabaena catenula''와 같은 조류 등 다양한 생물의 성장 패턴을 연구했다. L-system은 원래 이러한 단세포 생물 또는 구조가 단순한 다세포 생물의 성장 양식을 설명하고, 식물 세포 간의 이웃 관계를 기술하기 위해 개발되었다. 이후 L-system은 더 발달한 고등 식물의 형태나 복잡한 분기 구조를 기술하기 위한 도구로 발전하게 되었다.

3. L-system의 구조

L-system은 일반적으로 다음과 같은 네 개의 튜플로 정의되는 "파라메트릭 L-system"으로 알려져 있다.[3]

: '''G''' = {''V'', ''S'', ω, ''P''},

각 요소는 다음을 의미한다.


  • '''V''' (문자): 치환 규칙('''P''')에 의해 순차적으로 바뀌어가는 변수의 집합이다. L-system의 재귀적인 반복이 진행될 때, 결과 문자열은 이 '''V'''의 요소들로 구성된다.
  • '''S''' (상수): 계산 과정에서 변화하지 않는 상수의 집합이다. 일부 정의에서는 상수를 '''V''' 알파벳에 포함시키기도 한다.
  • '''ω''' (공리 또는 시작 문자열): 시스템의 초기 상태를 나타내는 문자열로, '''V'''의 요소들로 이루어진다.
  • '''P''' (치환 규칙): '''V'''의 요소들을 변화시키는 치환 규칙의 집합이다. 각 규칙은 예를 들어 `A → AB`와 같이 치환 전 문자열(전임자)과 치환 후 문자열(후임자)의 쌍으로 기술된다. '''P'''에 명시적인 규칙이 없는 문자는 자신으로 치환되는 항등 규칙(예: `B → B`)을 따른다고 가정하며, 이런 문자를 상수라고 부르기도 한다.


L-system 규칙은 초기 상태 '''ω'''에서 시작하여 반복적으로 적용된다. 각 반복 단계에서는 적용 가능한 모든 규칙이 '''동시에''' 적용된다는 특징이 있다. 이는 한 번에 하나의 규칙만 적용하는 일반적인 형식 문법과 구별되는 점이다.[3]

치환 규칙 '''P'''의 특성에 따라 L-system을 분류할 수 있다.

  • 치환 규칙이 주변 문자를 고려하지 않고 개별 문자에만 적용될 경우, 해당 L-system은 문맥 자유 언어와 관련되며 문맥 자유 L-system이라 한다.
  • 치환 규칙이 인접 문자와의 관계를 고려하는 경우, 문맥 의존 언어와 관련되며 문맥 의존 L-system이라 한다.
  • 각 문자에 대해 적용될 치환 규칙이 유일하게 정해진 경우, L-system은 결정론적이라고 하며, 특히 문맥 자유이면서 결정론적인 시스템을 D0L 시스템(deterministic context-free L-system)이라고 부른다.
  • 각 문자에 대해 여러 치환 규칙이 존재하고 특정 확률에 따라 규칙이 선택되어 적용되는 경우, 확률론적 L-system이라고 한다.

4. L-system의 응용

L-system은 자기 유사성을 가지는 복잡한 구조를 효율적으로 생성하는 규칙 기반 시스템이다. 이러한 특성 덕분에 컴퓨터 그래픽스 분야에서 식물 모델링이나 프랙탈 생성 등에 널리 활용되며, 그 외에도 다양한 분야에서 응용 가능성을 보여주고 있다.

4. 1. 그래픽 응용

L-system을 그래픽으로 응용하는 경우, L-system이 생성하는 문자열을 화면상의 도형으로 변환하는 과정이 필요하다. 예를 들어 ''FractInt''라는 프로그램에서는 로고처럼 터틀 그래픽스를 이용하여 그래픽을 생성한다. 이는 프로그램이 L-system의 문자열을 터틀 제어 명령으로 번역하여 도형을 그리게 하는 것이다.

5. L-system의 예시

L-system은 간단한 규칙으로부터 복잡한 구조를 생성하는 능력 덕분에 다양한 분야에서 모델링 도구로 활용된다. 대표적인 예시들은 다음과 같다.


  • 조류(Algae): 린덴마이어가 L-system을 처음 고안했을 때 사용한 모델로, 조류 세포의 성장 과정을 모방한다.
  • 피보나치 수열(Fibonacci sequence): 특정 규칙을 통해 생성되는 문자열의 길이가 피보나치 수열을 따르는 것을 보여준다.
  • 칸토어 집합(Cantor set): 선분을 반복적으로 3등분하고 가운데 부분을 제거하는 과정을 L-system으로 표현하여 칸토어 집합을 생성한다.
  • 코흐 곡선(Koch curve): 프랙탈 도형인 코흐 곡선의 생성을 L-system 규칙과 터틀 그래픽스를 이용해 보여준다.
  • 시에르핀스키 삼각형(Sierpinski triangle): 또 다른 유명한 프랙탈인 시에르핀스키 삼각형을 생성하는 여러 L-system 규칙을 소개한다.
  • 드래곤 곡선(Dragon curve): 자기 유사성을 가지는 드래곤 곡선을 L-system으로 생성하는 방법을 설명한다.
  • 프랙탈 식물(Fractal plant): L-system을 이용하여 나무나 풀과 같은 식물의 복잡한 분지 구조나 의 배열 등을 모델링하는 예시를 보여준다. Barnsley fern과 같은 특정 프랙탈 식물도 L-system으로 생성할 수 있다.


이 외에도 L-system은 다양한 수학적 패턴, 자연물의 형태, 예술적 디자인 등을 생성하는 데 응용될 수 있다. 각 예시에 대한 자세한 설명은 해당 하위 섹션에서 확인할 수 있다.

5. 1. 조류(Algae)

린덴마이어가 처음 제안한 L-system은 조류의 성장을 모델링하기 위해 고안되었다. 이 시스템은 다음과 같은 요소로 구성된다.

  • 변수: A, B
  • 상수: 없음
  • 공리 (시작 상태): A
  • 규칙:
  • * (A → AB)
  • * (B → A)


이 규칙에 따라 문자열은 다음과 같이 순차적으로 생성된다.

  • ''n'' = 0 : A
  • ''n'' = 1 : AB
  • ''n'' = 2 : ABA
  • ''n'' = 3 : ABAAB
  • ''n'' = 4 : ABAABABA
  • ''n'' = 5 : ABAABABAABAAB
  • ''n'' = 6 : ABAABABAABAABABAABABA
  • ''n'' = 7 : ABAABABAABAABABAABABAABAABABAABAAB


이 예시에서 치환 규칙 P는 조류 세포의 성장 과정을 나타낸다. 규칙 (A → AB)는 하나의 세포 A가 불균등한 세포 분열을 통해 일반적인 세포 A와 아직 성숙하지 않은 작은 세포 B를 만드는 과정을 상징한다. 반면, 규칙 (B → A)는 미성숙한 세포 B가 성장하여 분열 가능한 세포 A로 성숙하는 과정을 나타낸다.

이렇게 생성된 문자열을 시각적으로 표현할 수도 있다. 예를 들어, 문자 A를 분지 형태의 세포 그림으로, 문자 B를 작은 세포 그림으로 각각 바꾸어 그리면, 마치 한천 배지 위에 펼쳐진 조류의 콜로니와 유사한 형태의 그림을 얻을 수 있다.

5. 2. 피보나치 수열(Fibonacci sequence)

L-system을 사용하여 피보나치 수열을 생성할 수 있다. 다음은 두 가지 예시이다.

'''예시 1:'''

  • 변수 (V): A, B
  • 상수 (S): 없음
  • 시작 문자열 (ω): A
  • 규칙 (P): (A → AB), (B → A)


이 규칙에 따라 문자열이 생성되는 과정은 다음과 같다.

L-system 생성 과정 (규칙: A → AB, B → A)
세대 (n)문자열설명길이
0A시작 문자열1
1AB규칙 (A → AB) 적용2
2ABA이전 문자열 AB에 규칙 적용 (A → AB, B → A)3
3ABAAB이전 문자열 ABA에 규칙 적용5
4ABAABABA이전 문자열 ABAAB에 규칙 적용8



각 세대별 문자열의 길이를 보면 1, 2, 3, 5, 8, ... 와 같이 피보나치 수열이 나타나는 것을 확인할 수 있다. (단, 이 예시에서는 시작 문자열 A 때문에 피보나치 수열의 첫 번째 1은 건너뛴 형태이다.) 만약 첫 번째 1부터 시작하는 수열을 원한다면, 시작 문자열을 'B'로 설정하면 된다.

생성된 문자열은 피보나치 워드의 시퀀스와 일치한다. 각 문자열에서 왼쪽 끝부터 ''k''번째 문자를 계산할 때, 황금비율의 배수가 (k-1, k) 구간 내에 속하는지에 따라 값이 결정된다. 또한, 문자 A와 B의 비율 역시 황금비율에 수렴하는 특징을 보인다. 만약 규칙을 (A → BA), (B → A)로 변경하면, 생성되는 문자열은 원래 문자열의 좌우가 뒤집힌 형태가 되지만, 각 문자열의 길이는 동일하게 피보나치 수열을 따른다.

'''예시 2:'''


  • 변수 (V): A, B
  • 상수 (S): 없음
  • 시작 문자열 (ω): A
  • 규칙 (P): (A → B), (B → AB)


이 규칙에 따른 문자열 생성 과정과 길이는 다음과 같다.

L-system 생성 과정 (규칙: A → B, B → AB)
세대 (n)문자열길이
0A1
1B1
2AB2
3BAB3
4ABBAB5
5BABABBAB8
6ABBABBABABBAB13
7BABABBABABBABBABABBAB21



이 경우, 각 문자열의 길이는 1, 1, 2, 3, 5, 8, 13, 21, ... 로 피보나치 수열 전체를 보여준다. 이 예시 역시 규칙 (B → AB)를 (B → BA)로 바꾸어도 문자열의 길이는 동일하게 피보나치 수열을 따른다.

두 번째 예시에서 생성된 시퀀스는 G(n)=G(n-1)G(n-2) 관계를 만족하기 때문에 지역 연결 시퀀스이다. 여기서 G(n)은 ''n''번째 세대의 문자열을 의미한다.

5. 3. 칸토어 집합(Cantor set)

칸토어 집합 생성 과정 (7회 반복)


칸토어 집합을 생성하는 L-system은 다음과 같이 정의된다.

  • '''변수''': A, B
  • '''상수''': 없음
  • '''시작 문자열''' (axiom 또는 initiator): A
  • '''규칙''' (production rules):
  • * A → ABA
  • * B → BBB


이 시스템에서 'A'는 "앞으로 그리기"를, 'B'는 "앞으로 이동"(즉, 선을 그리지 않고 건너뛰기)을 의미한다. 이 L-system은 실수선 '''R''' 위에 칸토어 집합을 생성한다.

L-system의 형식적 표기법으로는 다음과 같이 나타낼 수 있다.

  • '''V''' (변수 집합): {A, B}
  • '''S''' (상수 집합): 없음
  • '''ω''' (시작 문자열): A
  • '''P''' (규칙 집합): {(A → ABA), (B → BBB)}


규칙을 반복 적용하면 다음과 같은 문자열이 생성된다.

  • ''n'' = 0 : A
  • ''n'' = 1 : ABA
  • ''n'' = 2 : ABABBBABA
  • ''n'' = 3 : ABABBBABABBBBBBBBBABABBBABA
  • ...


생성된 문자열에서 'A'를 선분으로, 'B'를 제거된 빈 공간으로 해석하면 칸토어 집합의 생성 과정을 시각적으로 나타낼 수 있다. 규칙 ''(A → ABA)''는 주어진 선분(폐구간)을 3등분한 뒤 가운데 부분을 제거하는 연산에 해당하며, 규칙 ''(B → BBB)''는 한 번 제거된 구간은 계속 빈 공간으로 유지됨을 의미한다.

칸토어 먼지 (7회 반복)

5. 4. 코흐 곡선(Koch curve)

오른쪽 각도만 사용하는 코흐 곡선의 변형을 L-system으로 나타낼 수 있다.

  • '''변수''': F
  • '''상수''': +, -
  • '''시작''' (공리): F
  • '''규칙''': F → F+F-F-F+F


여기서 각 기호는 터틀 그래픽스에서 다음과 같은 의미를 가진다.

  • F: 앞으로 선을 그린다.
  • +: 왼쪽으로 90° 회전한다.
  • -: 오른쪽으로 90° 회전한다.


이 규칙을 반복 적용하면 다음과 같은 문자열과 도형이 생성된다.

  • ''n'' = 0:
  • * 문자열: F
  • * --

  • ''n'' = 1:
  • * 문자열: F+F-F-F+F
  • * --

  • ''n'' = 2:
  • * 문자열: F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F
  • * --

  • ''n'' = 3:
  • * 문자열: F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F+F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F-F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F-F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F+F+F-F-F+F+F+F-F-F+F-F+F-F-F+F-F+F-F-F+F+F+F-F-F+F
  • * --

5. 5. 시에르핀스키 삼각형(Sierpinski triangle)

L-시스템을 사용하여 시에르핀스키 삼각형을 그리는 방법은 다음과 같다.

'''첫 번째 방법'''

  • '''변수''': F, G
  • '''상수''': +, −
  • '''시작''': F−G−G
  • '''규칙''': (F → F−G+F+G−F), (G → GG)
  • '''각도''': 120°


여기서 F와 G는 모두 "앞으로 그리기"를 의미하며, +는 "각도(120°)만큼 왼쪽으로 회전", −는 "각도(120°)만큼 오른쪽으로 회전"을 의미한다.

'''두 번째 방법 (시에르핀스키 화살촉 곡선)'''

시에르핀스키 삼각형은 시에르핀스키 화살촉 곡선 L-시스템을 사용하여 근사할 수도 있다.

  • '''변수''': A, B
  • '''상수''': +, −
  • '''시작''': A
  • '''규칙''': (A → B−A−B), (B → A+B+A)
  • '''각도''': 60°


여기서 A와 B는 모두 "앞으로 그리기"를 의미하고, +는 "각도(60°)만큼 왼쪽으로 회전", −는 "각도(60°)만큼 오른쪽으로 회전"을 의미한다 (터틀 그래픽스 참조). 이 규칙의 경우, 터틀(거북이 그래픽)은 삼각형의 왼쪽 아래에서 그리기를 시작한다. 반복 횟수 ''n''이 무한대로 커질 때, 그려지는 도형은 시에르핀스키 삼각형과 같아진다.


5. 6. 드래곤 곡선(Dragon curve)

드래곤 곡선은 L-시스템을 사용하여 그릴 수 있다.

: '''변수''' : F G

: '''상수''' : + −

: '''시작''' : F

: '''규칙''' : (F → F+G), (G → F-G)

: '''각도''' : 90°

여기서 F와 G는 모두 "앞으로 그리기"를 의미하며, +는 "각도만큼 왼쪽으로 돌리기", −는 "각도만큼 오른쪽으로 돌리기"를 의미한다.

400px

5. 7. 프랙탈 식물(Fractal plant)


  • '''변수''': 0, 1
  • '''상수''': "[", "]"
  • '''공리''': 0
  • '''규칙''': (1 → 11), (0 → 1[0]0)


이 도형은 공리를 재귀적으로 생성 규칙을 통해 적용하여 만들어진다. 입력 문자열의 각 문자는 규칙 목록과 비교되어, 출력 문자열에서 해당 문자를 대체할 문자 또는 문자열이 결정된다. 이 예시에서 입력 문자열의 '1'은 출력 문자열에서 '11'이 되고, '['와 ']'는 그대로 유지된다. '0'이라는 공리에 이 규칙을 적용하면 다음과 같이 문자열이 생성된다.

단계문자열
공리0
1번째 재귀1[0]0
2번째 재귀11[1[0]0]1[0]0
3번째 재귀1111[11[1[0]0]1[0]0]11[1[0]0]1[0]0
......



문자열은 재귀가 반복될수록 크기와 복잡성이 빠르게 증가하는 것을 볼 수 있다. 이 문자열은 각 기호에 특정 그래픽 연산을 할당하여 터틀 그래픽스를 사용해 그림으로 나타낼 수 있다. 예를 들어, 위 샘플에서 터틀 그래픽스는 다음과 같은 지침을 따를 수 있다.


  • 0: 잎으로 끝나는 선분을 그린다.
  • 1: 선분을 그린다.
  • [: 위치와 각도를 저장하고 왼쪽으로 45도 회전한다.
  • ]: 저장된 위치와 각도를 복원하고 오른쪽으로 45도 회전한다.


여기서 저장 및 복원은 LIFO 스택(후입선출 방식)을 사용한다. 터틀 그래픽스 해석기가 '[' 기호를 만나면 현재 위치와 각도를 스택에 저장하고, ']' 기호를 만나면 가장 최근에 저장된 위치와 각도를 스택에서 꺼내 복원한다. 여러 값이 저장된 경우, 복원 시 가장 마지막에 저장된 값이 사용된다. 위에 설명된 그래픽 규칙을 각 재귀 단계의 문자열에 적용하면 다음과 같은 이미지가 생성된다.

공리 단계


첫 번째 재귀 단계


두 번째 재귀 단계


세 번째 재귀 단계


네 번째 재귀 단계


일곱 번째 재귀 단계, 10배 축소


Barnsley fern 역시 L-시스템으로 생성할 수 있다.

  • '''변수''' : X F
  • '''상수''' : + − [ ]
  • '''시작''' : X
  • '''규칙''' : (X → F+[[X]-X]-F[-FX]+X), (F → FF)
  • '''각도''' : 25°


Barnsley fern을 그리기 위한 터틀 그래픽스 명령은 다음과 같다. 이 역시 LIFO 스택을 사용하여 위치와 각도를 저장하고 복원한다.

  • F: 앞으로 선을 그린다.
  • −: 오른쪽으로 25° 회전한다.
  • +: 왼쪽으로 25° 회전한다.
  • X: 아무런 그리기 동작을 하지 않으며, 곡선의 형태를 만드는 데 사용된다.
  • [: 현재 위치와 각도를 스택에 저장(push)한다.
  • ]: 스택에서 가장 최근에 저장된 위치와 각도를 복원(pop)한다.




다양한 형태의 프랙탈 식물 및 유사 구조를 L-시스템으로 생성할 수 있다.
지이류 형태의 L-시스템 예시 1


지이류 형태의 L-시스템 예시 2

  • 초본 작도 예시:

나선형 초본 형태의 L-시스템 예시 1


나선형 초본 형태의 L-시스템 예시 2


덤불 형태의 L-시스템 예시

  • 목본 작도 예시:

프랙탈 나무 예시 1


프랙탈 나무 예시 2


프랙탈 나무 예시 3


다른 형태의 프랙탈 나무 예시

프랙탈 구조 예시 1


프랙탈 구조 예시 2


사각형 기반 프랙탈 구조 예시


헤켈의 방산충 스케치 (참고)


(참고)헤켈의 방산충 스케치.

6. L-system의 확장

L-시스템 규칙의 재귀적 특성은 자기 유사성으로 이어지며, 이를 통해 프랙탈과 같은 복잡한 형태를 쉽게 표현할 수 있다. 이러한 특징 덕분에 식물 모델링이나 자연스러운 유기체 형태 생성, 인공 생명 연구 등 다양한 분야에서 활용된다.

L-시스템은 일반적으로 다음과 같이 정의되는 '''매개변수 L-시스템'''(Parametric L-system)으로 설명될 수 있다.

:'''G''' = (''V'', ω, ''P'')

여기서 각 요소는 다음을 의미한다.


  • '''V''' (알파벳): 시스템에서 사용되는 기호의 집합으로, 대체될 수 있는 변수(''variable'')와 대체될 수 없는 상수(''constant'') 또는 터미널(''terminal'')을 포함한다.
  • '''ω''' (시작 문자열): 시스템의 초기 상태를 나타내는 기호 문자열이다. 공리(''axiom'') 또는 개시자(''initiator'')라고도 불린다.
  • '''P''' (생산 규칙): 변수를 다른 변수나 상수의 조합으로 대체하는 규칙들의 집합이다. 각 규칙은 전임자(''predecessor'')와 후임자(''successor'') 문자열로 구성된다. 규칙에 정의되지 않은 기호는 자신으로 변환되는 항등 규칙(A → A)을 따른다고 가정하며, 이를 상수 또는 터미널이라 한다.


L-시스템의 규칙은 초기 상태(ω)에서 시작하여 반복적으로 적용되는데, 중요한 특징은 각 반복 단계에서 적용 가능한 모든 규칙이 동시에 적용된다는 점이다. 이는 한 번에 하나의 규칙만 적용하는 형식 문법과의 주요 차이점이다.[3] 예를 들어, `S → SS`라는 규칙이 있을 때, 형식 문법에서는 `S` → `SS` → `SSS` 와 같이 순차적으로 적용될 수 있지만, L-시스템에서는 `S` → `SS` → `SSSS` 와 같이 동시에 적용 가능한 모든 규칙이 한 번에 적용된다. 따라서 L-시스템으로 생성되는 문자열 집합은 해당 문법으로 정의되는 형식 언어의 부분집합이 될 수 있다.

L-시스템은 규칙이 주변 기호(문맥)를 고려하는지 여부에 따라 문맥 의존적(context-sensitive) L-system과 그렇지 않은 문맥 자유적(context-free) L-system으로 나눌 수 있다. 문맥 자유 L-시스템은 문맥 자유 문법으로 지정된다. 또한, 각 기호에 대해 단 하나의 규칙만 존재하면 결정적(deterministic) L-system (특히 문맥 자유적인 경우 D0L 시스템이라 불림), 여러 규칙이 확률적으로 선택되면 확률적(stochastic) L-system이라고 한다.

L-시스템으로 생성된 문자열은 터틀 그래픽스와 같은 방식으로 해석되어 시각적인 이미지로 표현될 수 있다. 예를 들어, 프로그램 ''Fractint''는 터틀 그래픽스를 사용하여 화면 이미지를 생성한다 (로고 (프로그래밍 언어)와 유사). L-시스템 모델의 각 상수를 터틀 명령으로 해석하는 방식이다.

이러한 기본적인 L-시스템 개념 외에도, 확률 문법, 문맥 민감 문법, 그리고 매개변수 문법 등 다양한 확장 기법들이 개발되어 함께 사용되고 있다. 각 기법에 대한 자세한 내용은 해당 하위 섹션에서 다룬다.

6. 1. 확률적 L-system (Stochastic L-system)

L-system에서 각 기호에 대한 치환 규칙(생산 규칙)이 단 하나만 존재하여 항상 동일한 방식으로 변환이 이루어지는 경우, 이를 결정론적 L-system (Deterministic L-system)이라고 한다. 특히 문맥 자유(context-free) 규칙을 사용하는 결정론적 L-system은 D0L 시스템이라고 부른다.[3]

반대로, 하나의 기호에 대해 여러 개의 생산 규칙이 존재하고, 각 규칙이 적용될 확률이 정해져 있는 경우 이를 확률적 L-system (Stochastic L-system)이라고 한다. 즉, 문자열을 치환하는 과정에서 어떤 규칙이 선택될지는 미리 정해진 확률에 따라 무작위로 결정된다. 이로 인해 동일한 초기 상태(ω)와 규칙을 사용하더라도 실행할 때마다 다른 결과가 생성될 수 있다.

예를 들어, 결정론적 L-system에서 `A → AB`라는 규칙만 있다면 기호 `A`는 항상 `AB`로 치환된다. 하지만 확률적 L-system에서는 다음과 같이 확률을 부여할 수 있다.

  • `A (0.5) → AB` (50% 확률로 `AB`로 치환)
  • `A (0.5) → A` (50% 확률로 변경되지 않음)


이처럼 확률적 L-system은 생성 과정에 무작위성을 도입하여 예측 불가능하고 다양한 형태를 만드는 데 유용하다. 특히 식물의 성장 모델링이나 프랙탈 생성 등에서 좀 더 자연스럽고 현실적인 모습을 표현하는 데 활용될 수 있다. 진화적 맥락에서 확률적 L-system을 사용할 때는, 생성되는 이미지의 확률적 특성이 세대 간에 일관성을 유지하도록 유전자형난수 시드(seed)를 포함시키는 방법이 고려되기도 한다.

확률적 L-system은 아직 표준화된 문법이 없기 때문에, 이를 구현하는 소프트웨어마다 문법 표기 방식이 다를 수 있다. 다음은 몇 가지 소프트웨어에서 확률적 분기 규칙을 구현한 예시이다.

통 린(Tong Lin)의 구현
(1996)
Houdini
(L-system SOP)
Cinema 4D
(MoSpline의 Turtle)
||


6. 2. 문맥 의존 L-system (Context-sensitive L-system)

문맥 의존 문법은 생성 규칙을 적용할 때, 단순히 해당 기호만 보는 것이 아니라 그 기호 주변의 다른 기호들, 즉 문맥(context)까지 함께 고려하는 방식의 L-system이다. 이는 치환 규칙이 인접한 문자와의 상호 관계까지 고려하는 것으로, 단일 기호만을 참조하는 문맥 자유 문법과 구별되는 특징이다.[3]

문맥 의존적인 생성 규칙은 변경하려는 기호뿐만 아니라, 그 기호의 앞이나 뒤에 오는 특정 기호(문자열)가 존재할 때만 작동하도록 정의할 수 있다. 예를 들어, 다음과 같은 규칙을 생각해 볼 수 있다.

: `b < a > c → aa`

이 규칙은 입력 문자열에서 기호 'a'가 바로 앞에 'b'가 오고 바로 뒤에 'c'가 오는, 즉 '...bac...'와 같은 특정 문맥 속에서 발견될 경우에만 'a'를 'aa'로 변환시킨다는 의미이다.

하나의 기호에 대해 여러 가지 다른 문맥을 처리하기 위해 여러 개의 생성 규칙이 정의될 수 있다. 만약 어떤 기호와 그 주변 문맥에 해당하는 특정 생성 규칙을 찾을 수 없다면, 해당 기호는 아무런 변화 없이 그대로 유지되는 항등 생성(identity production) 규칙이 적용된다.

또한, 하나의 문법 내에 문맥 의존 규칙과 문맥 자유 규칙이 모두 존재할 경우, 특정 기호에 대해 두 종류의 규칙이 모두 적용될 수 있는 상황이라면 문맥 의존 규칙이 문맥 자유 규칙보다 우선적으로 적용된다.

이처럼 문맥 의존 L-system은 패턴 매칭과 유사한 방식으로 문맥을 파악하여, 상황에 따라 다르게 기호를 변화시키는 분기 처리를 가능하게 한다. 문맥 의존 L-system을 구현한 예시로는 Tong Lin의 구현 등이 있다.

6. 3. 파라메트릭 L-system (Parametric L-system)

파라메트릭 L-system에서는 알파벳의 각 기호에 연관된 매개변수(parameter) 목록을 가진다. 이 매개변수 목록과 결합된 기호를 모듈(module)이라고 하며, 파라메트릭 L-system의 문자열은 이러한 모듈들의 연속으로 구성된다. 예를 들어 다음과 같은 문자열이 가능하다.

: `a(0,1)[b(0,0)]a(1,2)`

매개변수는 그림을 그리는 함수나 생성 규칙에서 사용될 수 있다. 생성 규칙은 두 가지 방식으로 매개변수를 활용한다. 첫째, 규칙 적용 여부를 결정하는 조건문에서 사용될 수 있다. 둘째, 생성 규칙이 실제 매개변수의 값을 수정할 수 있다. 예를 들어 다음과 같은 규칙을 생각해보자.

: `a(x,y) : x == 0 → a(1, y+1)b(2,3)`

이 규칙은 모듈 `a(x,y)`에 대해 조건 `x == 0`이 만족될 경우에만 적용된다. 따라서 `a(0,2)`는 이 규칙에 따라 변환되지만, `a(1,2)`는 변환되지 않는다.

규칙의 변환 부분에서는 매개변수뿐만 아니라 전체 모듈에도 영향을 미칠 수 있다. 위의 예시에서, 초기 매개변수 `(2,3)`을 가진 모듈 `b(x,y)`가 문자열에 새롭게 추가된다. 또한, 기존 모듈의 매개변수도 변환된다. 위 생성 규칙에 따라 모듈 `a(0,2)`는 다음과 같이 변환된다.

: `a(1,3)b(2,3)`

여기서 `a(x,y)`의 `x` 매개변수는 명시적으로 `1`로 변환되었고, `y` 매개변수는 기존 값 `2`에 `1`이 더해져 `3`으로 변경되었다.

파라메트릭 L-system을 사용하면, 터틀 그래픽 해석 방식에 의존하지 않고 문법 자체에서 선의 길이나 분기 각도와 같은 기하학적 속성을 정의할 수 있다. 또한, 모듈의 매개변수로 '나이'와 같은 정보를 전달하면, 식물 각 부분의 성장에 따라 규칙이 달라지도록 하여 나무의 전체 생장 과정과 같은 애니메이션을 만드는 것도 가능하다.

7. L-system 관련 문제

L-시스템 연구와 관련하여 아직 해결되지 않은 여러 문제들이 존재한다. 대표적인 예는 다음과 같다.


  • 모든 결정적 문맥 자유 L-시스템이 국소 연결되는 조건을 명확히 밝히는 문제이다. 이 문제는 현재 변수가 두 개뿐인 경우에만 해답이 알려져 있다.[5]
  • 특정 구조가 주어졌을 때, 그 구조를 생성할 수 있는 L-시스템, 즉 생성 규칙이나 매개변수를 역으로 찾아내는 문제이다. 이는 L-시스템을 거꾸로 추적하는 것이 매우 어렵기 때문이며, 특히 자연에서 볼 수 있는 복잡한 구조처럼 여러 단계를 거쳐 형성된 경우 더욱 두드러지는 난제이다.

8. L-system의 종류

L-system은 다양한 차원에서 정의될 수 있다.

'''실수선''' ('''R''')에서의 L-system:



'''평면''' ('''R'''2)에서의 L-system:

'''공간''' ('''R'''3)에서의 L-system:

참조

[1] 학술지 Mathematical models for cellular interactions in development II. Simple and branching filaments with two-sided inputs 1968-03
[2] 서적 The mathematical theory of L systems Academic Press, New York 1980
[3] 웹사이트 L-systems https://encyclopedia[...] Springer 2022-07-26
[4] 간행물 A Bi‐Directional Procedural Model for Architectural Design https://www.research[...] 2017-12
[5] 서적 Handbook of Formal Languages
[6] 서적 Proceedings of the 27th International Conference on Scientific and Statistical Database Management https://hal.archives[...]
[7] 학술지 L-Py: An L-System Simulation Framework for Modeling Plant Architecture Development Based on a Dynamic Language



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com