조각 계산 중…

스테인드글라스 생성기

유리 조각을 평면 분할(planar map)로 계산해. 도형을 겹쳐 쌓는 게 아니라, 도형들이 만든 선이 평면을 자른 결과의 각 면(face) 하나가 유리 한 조각이야. 그래서 겹침도 빈틈도 원리적으로 생기지 않아.

창 형식
문양 작도 파라미터
색 — 실제 유리 색소 계열 (평면 단색)
납선(came) · 석재 · 빛
조사 근거 보기
조각을 나누는 규칙 — 평면 분할(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). 제조사 공식 헥스 색표는 존재하지 않아(낱장마다 다름) — 각 색소 계열의 독립 검증 표준색으로 근사했고 정확한 제조사 매칭은 아니야.