- 중학교 때 그래프 종이에 그린 정사각형 복제 패턴을 12년간 벽에 붙여 둔 뒤, 이를 wallflower라는 프랙탈로 분석하며 L-System, 선형대수, 수 체계, 고차원 일반화까지 연결함
- 한 정사각형에서 시작해 현재 모양을 상하좌우로 복제하고, 다음 단계에서는 약 27도 회전된 방향으로 복제하는 절차가 평면을 채우는 프랙탈을 만듦
- 단순한 L-System 규칙
R → RLR,L → RLL은 비슷한 윤곽을 만들지만 같은 도형은 아니며, 더 흔한 형태는 Quadratic von Koch island, Quadratic Flake, Minkowski Sausage 등으로 문서화돼 있음 - wallflower는 행렬 (M=\begin{bmatrix}-2&1\1&2\end{bmatrix})를 밑으로, 방향 벡터를 숫자로 쓰는 행렬 기반 수 체계로 해석할 수 있고, (\det(M)=-5)가 반복마다 방향을 뒤집음
- 3D 일반화는 대칭과 겹침 문제로 어색해졌고, 4D에서는 조건을 만족하는 행렬로 orthotopeflower를 만들 수 있었지만 같은 제약에서는 1D·2D·4D만 가능해 보임
벽에 붙어 있던 프랙탈의 시작
- 중학교 때 그래프 종이에 정사각형을 반복적으로 합치고 복제하는 낙서를 만들었고, 나중에 분석하려고 벽에 붙여 둠
- 꽃잎처럼 퍼지는 구조와 벽에 오래 붙어 있던 사연 때문에 이 프랙탈을 wallflower라고 부름
- 원래 그린 절차는 다음과 같음
- 한 개의 정사각형에서 시작함
- 현재 상태의 복사본 4개를 왼쪽, 오른쪽, 위, 아래에 배치함
- 다음에는 현재 상태의 복사본 4개를 같은 네 방향에서 약 27도 시계 방향으로 기울어진 위치에 배치함
- 그래프 종이가 다 찰 때까지 두 배치 방식을 번갈아 반복함
- 이 절차는 Gosper Curve처럼 반복하면 평면의 임의 영역을 덮을 수 있고, 각 중간 상태도 평면을 타일링할 수 있음
L-System과 거의 같지만 다른 윤곽
- 약 1년 전, 이 윤곽을 L-System으로 만들 수 있다고 봄
- 사용한 규칙은 90도 오른쪽 회전 (R)과 왼쪽 회전 (L)만으로 구성됨
- 시작 문자열은 (RRRR)
- 각 반복에서 (R \rightarrow RLR), (L \rightarrow RLL)로 치환함
- 처음 몇 단계는 wallflower와 같은 윤곽처럼 보였지만, 애니메이션을 만들면서 4번째 반복부터 두 방식이 어긋난다는 점을 확인함
- 차이는 복사본 배치 방식에서 나옴
- “drag and drop” 방식은 3번째 반복의 복사본을 중심 기준 상하좌우에 바로 배치함
- L-System 방식은 복사본을 대각선 방향에 배치함
- L-System이 만드는 형태는 이미 여러 곳에 문서화돼 있음
- List of fractals의 “Quadratic von Koch island”
- Koch snowflake의 “Quadratic Flake”
- Minkowski Sausage
- Jeffrey Ventrella의 Mandelbrot’s Quartet
- 벽에 있던 drag and drop 변형은 Google 이미지 검색과 Wikipedia 탐색으로는 같은 형태를 찾지 못함
- wallflower에 맞는 규칙으로 (L \rightarrow RLR), (R \rightarrow LLR)를 찾았지만, 이 규칙은 단계마다 윤곽을 그리는 방향이 뒤집히는 효과를 냄
프랙탈을 세는 방식
- wallflower는 원점에서 바깥으로 커지므로, 자연수와 격자 좌표를 대응시키는 방식으로 볼 수 있음
- 중심 정사각형을 0으로 두고, 첫 반복에서 추가되는 주변 4개 정사각형을 시계 방향으로 1, 2, 3, 4로 번호 매김
- 다음 반복에서는 위에서 아래, 왼쪽에서 오른쪽으로 훑어 번호를 붙일 수도 있지만, 이 방식은 재귀 구조와 잘 맞지 않음
- 각 꽃잎이 이전 반복의 복사본이라는 점을 이용하면, 꽃잎 내부와 꽃잎 사이 모두에서 중앙에서 바깥으로 번호를 재사용할 수 있음
- 이 번호 매김에서는 5의 배수, (5n+1), 25의 배수 등이 기울어진 격자 패턴을 이룸
- 이유는 각 반복의 정사각형 수가 (1, 5, 25, 125, ...)로 늘어나기 때문임
- 매 반복은 이전 상태 1개에 복사본 4개를 더해 총 5배가 됨
- 그래서 5의 거듭제곱과 5진수 표현이 구조와 잘 맞음
행렬을 밑으로 쓰는 수 체계
- 어떤 수를 5진수 자릿값처럼 분해하면, 각 자릿값에 대응하는 벡터를 더해 프랙탈 격자에서의 위치를 찾을 수 있음
- 예를 들어 231은 (200 + 30 + 1)로 보고, 각각의 위치 벡터를 더해 231의 위치를 얻음
- 한 자리 값은 방향 벡터로 정의됨
- (\vec{0}=(0,0))
- (\vec{1}=(1,0))
- (\vec{2}=(0,1))
- (\vec{3}=(-1,0))
- (\vec{4}=(0,-1))
- (10^n) 꼴의 자릿값은 처음에는 짝수·홀수에 따라 나뉘는 조건식으로 표현됐지만, 행렬 하나를 반복 적용하면 조건 없이 계산할 수 있음
- 사용한 행렬은 다음과 같음
[ M=\begin{bmatrix} -2 & 1 \ 1 & 2 \end{bmatrix} ]
- 이 행렬은 (M^2=5I)가 되어, 두 단계마다 크기가 5배로 정렬됨
- 따라서 다음과 같이 표현할 수 있음
[ \overrightarrow{(10^n)}=M^n\vec{1} ]
- 이 구조는 스칼라 밑과 스칼라 숫자를 쓰는 일반 진법 대신, 행렬 밑과 벡터 숫자를 쓰는 수 체계로 볼 수 있음
determinant가 두 프랙탈을 가름
- (M)의 행렬식은 (\det(M)=-5)이며, 음수 행렬식 때문에 반복마다 공간의 방향이 뒤집힘
- 이 뒤집힘 때문에 원래 번호 매김과 비교해 20과 40 같은 값의 위치가 바뀌어 보임
- 뒤집힘을 피하려면 양의 행렬식을 가진 행렬을 고를 수 있음
[ M'=\begin{bmatrix} 2 & 1 \ -1 & 2 \end{bmatrix} ]
[ \det(M')=5 ]
- (M')는 방향을 뒤집지 않고 숫자 벡터를 계속 시계 방향으로 회전시키며, 이 행렬을 밑으로 쓰면 앞서 나온 L-System 버전이 재현됨
- 두 프랙탈의 차이는 다음과 같음
- wallflower는 (\det(M)=-5)인 (M)에서 나옴
- 더 흔한 quadratic flake 계열은 (\det(M')=5)인 (M')에서 나옴
- 행렬식의 절댓값 5는 매 반복에서 프랙탈 크기가 5배가 되는 구조와 맞음
- 행렬식이 더 크면 복사본이 너무 빨리 커져 빈 공간이 생김
- 행렬식이 더 작으면 복사본이 너무 느리게 커져 반복이 겹침
- 약 27도라는 각도는 정수 좌표, 행렬식 (\pm5), 벡터 크기 (\sqrt5) 조건에서 나오는 (\langle1,2\rangle) 벡터와 관련됨
- 이 벡터의 각도는 (\arctan(2/1)\approx63.43^\circ)
- y축 기준으로는 약 27도 떨어져 있음
덧셈 규칙과 자리올림
- 벡터 덧셈은 전개된 자릿값에는 잘 맞지만, (\vec{2}+\vec{2}\neq\vec{4})처럼 일반적인 숫자 덧셈과는 다르게 동작함
- 1부터 4까지는 실제 숫자라기보다 위, 오른쪽, 아래, 왼쪽 방향으로 보는 편이 더 자연스러움
- 반대 방향은 서로 상쇄됨
- (\vec{1}+\vec{3}=\vec{0})
- (\vec{2}+\vec{4}=\vec{0})
- 단위 벡터 조합을 표로 만들면 일부 덧셈 결과가 두 자리 값이 됨
- 이 때문에 큰 수를 더할 때는 일반적인 긴 덧셈처럼 자리올림을 처리해야 함
- 예시로 (\vec{22}+\vec{1})을 계산하면, (\vec{2}+\vec{1}=\vec{13}) 규칙 때문에 결과가 133으로 나옴
- 이 덧셈 체계가 일반적으로 작동하는지는 증명하지 않고 독자 검증 대상으로 남김
관련된 수 체계와 연구
- 벽꽃 프랙탈의 수 체계는 숫자에 자연수만 쓰지 않는 다른 진법들과 연결됨
- Balanced Ternary는 (-1,0,1)을 숫자로 쓰고 3을 밑으로 쓰며, wallflower는 여기에 y축의 양·음 방향 숫자를 더한 2차원 유사체처럼 볼 수 있음
- generalized balanced ternary는 퍼뮤토헤드론 격자로 임의 차원에 일반화되며, 2차원에서는 육각 격자가 됨
- Quater-imaginary Base는 (2i)를 밑으로 쓰고 0, 1, 2, 3을 숫자로 쓰는 체계임
- (M')는 복소수 (2+i)에 대응하는 밑으로 볼 수 있으며, Timothy James McKenzie Makarios의 Balanced base 2+i (and some gratuitous fractals)가 이 개념을 다룸
- 관련 자료로 다음을 찾음
- Project BinSys: 행렬식이 2인 행렬 밑을 찾는 프로젝트
- Andrew Vince의 Replicating Tesselations: 프랙탈, 타일링, 선형대수, 수 체계를 더 엄밀하게 다루고 (\mathbb{Z}^2)를 넘어 일반 격자로 확장함
3D와 4D로 확장하기
- 3D에서는 정육면체 하나에서 시작해 여섯 방향으로 복사하는 “3D plus” 구조를 생각함
- 3x3 행렬에 원하는 조건은 다음과 같음
- 모든 항목이 정수여야 함
- 각 열 벡터는 원점에서 해밍 거리 3이어야 함
- 반복마다 6개 복사본을 더하므로 크기가 7배가 되어야 하고, 행렬식은 (\pm7)이어야 함
- 조건을 만족하는 3x3 행렬을 찾았지만, 시각화 결과는 반복이 눌린 듯한 형태가 되고 이전 반복이 드러나는 문제가 생김
- 두 개의 3D plus를 추가하면 빈 부분을 메울 수 있었고, 8개 중심점이 뒤틀린 큐브의 꼭짓점처럼 배열됨
- 더 대칭적인 배치를 위해서는 각 열이 서로 직교하고 같은 크기를 가져야 하는 조건이 충분할 수 있지만, 3D에서는 정수 좌표 조건과 맞지 않아 불가능해 보임
- 4D에서는 조건이 맞아떨어짐
- 각 열 벡터의 성분 제곱합이 3이면 됨
- 4개 성분 중 3개를 (\pm1), 하나를 0으로 두는 방식이 가능함
- 다음 4x4 행렬로 4D 프랙탈을 구성함
[ \begin{bmatrix} 0 & -1 & -1 & -1 \ 1 & 0 & -1 & 1 \ 1 & 1 & 0 & -1 \ 1 & -1 & 1 & 0 \end{bmatrix} ]
- 이 4D 프랙탈은 orthotopeflower라고 부름
- 4D 시각화는 (w) 값을 고정한 3D 슬라이스로 보거나, 7x7 격자 안에 7x7 격자를 배치해 4차원 창을 표현하는 방식으로 다룸
- 31x31x31x31 보기 창에서는 3D에서 보였던 과도한 눌림 없이 바깥으로 확장되는 것처럼 보임
더 높은 차원과 마지막 반전
- 같은 제약을 고차원으로 확장하면, 조건을 만족하는 차원은 1D, 2D, 4D뿐인 것으로 보임
- 1D는 balanced ternary
- 2D는 wallflower 또는 quadratic flake
- 4D는 orthotopeflower
- 4D에서 고른 행렬은 쿼터니언 (i+j+k)를 인코딩하며, 이를 통해 밑이 (i+j+k)이고 숫자가 (0,\pm1,\pm i,\pm j,\pm k)인 balanced nonary quaternion base를 생각할 수 있음
- 이 쿼터니언 체계가 실제로 작동하는지는 확실하지 않아, 더 많은 수학을 아는 미래의 자신에게 남김
- 번아웃 이후 수학과 프로그래밍에 대한 흥미를 되살리려는 시도가 오래된 낙서를 프랙탈, 수 체계, 선형대수, 고차원으로 이어지는 탐색으로 바꿈
- 마지막 반전으로, 글의 시각화들은 썸네일 속 실제 벽 프랙탈과 일치하지 않음
- 실제 벽의 4번째 반복은 약 27도 반대 방향으로 복사돼 있음
- 당시에는 계속 같은 방향으로 기울이면 축에서 벗어날 것이라고 생각해 보정하려 했지만, (M)의 구조는 이미 단계마다 스스로 보정됨
- Donald Knuth도 벽에 프랙탈을 붙일 때 wrong turn을 한 적이 있다는 점으로 마무리함