조각을 나누는 규칙 — 평면 분할(planar map / arrangement)
앞서 만든 버전은 도형을 겹쳐 그리는
stacking 방식이었는데, 이건 스테인드글라스가 아니라 콜라주야. 벡터 일러스트레이션 이론은 이 둘을 명시적으로 구분해 — "쌓기(stacking, 2½-D)"에서는 위 도형이 아래를 가리지만, "평면 분할(planar map)"에서는
경로에 채우기·선 속성이 없고, 경로들이 교차해서 만든 영역(face)에 색이 들어간다.
· Asente, Schuster & Pettit (Adobe),
"Dynamic Planar Map Illustration", ACM TOG 26(3) / SIGGRAPH 2007 — Illustrator의 Live Paint 논문. Figure 2가 정확히 "겹쳐 그린 원 세 개 → 겹친 부분이 각각 독립된 칠할 수 있는 조각이 된다"를 보여줘. 스테인드글라스가 바로 이 구조야.
· Gangnet, Hervé, Pudet & Van Thong,
"Incremental Computation of Planar Maps", SIGGRAPH 1989 — 평면 분할 계산의 원전.
·
CGAL 2D Arrangements 매뉴얼 — "arrangement는 입력 곡선들이 유도하는 평면 분할이며 DCEL(이중 연결 간선 리스트)로 표현한다".
·
"Finding faces of a planar graph" (cp-algorithms) — 선분 집합에서 평면 그래프를 만들고 face를 추출하는 표준 알고리즘. 다만 이 방식은 교차점 계산이 O(n²log n)이고, 이 창의 원들은 서로
접(tangent)하는 배치라 수치적으로 가장 불안정한 케이스야(그래서 CGAL이 정확산술을 쓴다).
그래서 이 툴이 쓴 방법 — arrangement의 face는 정의상 "모든 곡선에 대한 안/밖 부호가 같으면서 서로 연결된 최대 영역"이야. 그래서 부호벡터를 직접 계산하고(모든 원·직선에 대해 안/밖 판정) 연결성분을 구하면 face 집합이 정확히 나와. 접점·퇴화에 완전히 강건하고, 겹침·빈틈이 원리적으로 불가능해. 그 다음 각 면의 경계를 크랙 추적으로 따고 Douglas–Peucker로 단순화해서 벡터로 만들어. 래스터 경계를 벡터로 되돌리는 이 순서는 실제 스테인드글라스 제작 코드에도 선례가 있어 —
C. Scott Ananian, "Automatic Generation of Stained Glass from Scanned Photos"는 윤곽을 potrace로 벡터화한 뒤 Delaunay 중심선으로 came(납) 폭을 오프셋했어.
문양 자체
· Charbonneau, Boulerice & Booth,
"Computer-Aided Modeling Applied to Architectural Know-How: The Gothic Rose Window" (ITcon 11, 2006) — 로즈윈도는 "중심 로제트 + 동심 링의 폴리오일 + 테두리"로 구성되고, 조인트가 중심에서 방사하는 wheel형과 각 폴리오일 중심에서 방사하는 flat-plate형으로 갈린다. 중심/1링/2링 + 방사 배경 구조가 여기서 왔어.
· Havemann & Fellner,
"Generative Parametric Design of Gothic Window Tracery" (SMI 2004) — 고딕 트레이서리는 "원과 직선"이라는 두 요소를 교차·오프셋만으로 조합한 것이라는 정식화.
· 폴리오일 접원 작도: 반지름
r = R·sin(π/N)/(1+sin(π/N)) — 중심원 안에 서로 접하는 N개 꽃잎원을 배치하는 표준 컴퍼스 작도.
·
이슬람 기하 타일링(지리스)은 Hankin의
polygons in contact 작도를 그대로 구현했어. 바탕 타일링의
각 변 중점에서 두 광선이 접촉각 θ로 타일 안쪽을 향해 출발하고, 반대 방향 광선을 만나는 지점에서 멈춘다. 그렇게 생긴 선 그물이 곧 별 문양이야. 인접한 두 타일이 같은 변 중점을 공유하니 선이 타일 경계를 가로질러 자연스럽게 이어져. θ를 바꾸면 같은 타일링에서 다른 별이 나와.
근거 = Kaplan,
"Islamic Star Patterns in Absolute Geometry" (2004) — Hankin 기법을 전산화한 논문. 실제 배포 코드
CodingTrain/StarPatterns(
hankin.js가 이 광선 교차를 그대로 계산),
TiledPatternMaker(Kaplan 원조 taprats의 C++ 후속),
"Generating Families of Islamic Star Rosette Patterns Based on k-Uniform Tilings" (Bridges 2022) — 별 문양을 k-균일 타일링 위에 세우는 방식.
바탕 타일링 격자는 좌표를 직접 유도해서 넣었어. 4.8.8은 주기 p에 팔각형 외접반지름 p/(2cos22.5°), 사각형 외접반지름 p(√2−1)/√2·… = 0.2929p. 3.6.3.6은 육각형 변 a에 대해 중심이 간격 2a의 삼각격자(v₁=(2a,0), v₂=(a,√3a))에 놓이고 삼각형 둘이 각 셀을 메워.
· 배경 쿼리(다이아몬드 유리):
"Historic Leaded Lights",
Wikipedia "Leadlight".
· 보로노이 모드: Kobayashi & Ito(2020), Mould(2003), Ashlock & Karthikeyan(2006) /
d3-delaunay. 보로노이도 평면 분할이라 같은 파이프라인에 그대로 들어가.
색 — 중세 유리는 코발트(파랑)·구리/금(빨강)·철(초록)·안티몬/은착색(노랑)·망간(보라)의 6주색 체계(
Britannica,
ScienceDirect). 제조사 공식 헥스 색표는 존재하지 않아(낱장마다 다름) — 각 색소 계열의 독립 검증 표준색으로 근사했고 정확한 제조사 매칭은 아니야.