Daftar Isi

Menggambar Kristal Salju Fraktal (Snowflakes) Menggunakan Sistem Lindenmayer (L-Systems) di LaTeX TikZ

Artikel ini membahas teori fraktal Sistem Lindenmayer (L-Systems) dan teknik pemodelan geometri kristal salju (snowflakes) dengan simetri heksagonal 6060^\circ di LaTeX TikZ.


Di alam bebas, kepingan salju (snowflake) terbentuk dari pembekuan uap air yang mengkristal dengan struktur molekul heksagonal. Akibatnya, hampir seluruh kristal salju memiliki simetri radial 6 lipat (rotasi 6060^\circ).

Dalam ilmu komputer dan matematika fraktal, salah satu metode paling elegan untuk memodelkan struktur fraktal yang memiliki percabangan berulang adalah Sistem Lindenmayer (L-Systems), yang digagas oleh ahli biologi teoritis Aristid Lindenmayer pada tahun 1968.

Artikel ini mengulas teknik pengodean LaTeX TikZ karya Jose Luis Diaz (JLDiaz). Dengan mendefinisikan aturan pembentukan satu “lengan” atau cabang kristal salju menggunakan pustaka lindenmayersystems, lalu memutarnya secara otomatis sebanyak 6 kali (\foreach \a in {0,60,...,300}), kita dapat menghasilkan beragam ilustrasi kristal salju yang sangat presisi dan estetis.


Sebuah Sistem Lindenmayer formal dinyatakan sebagai kuintupel G=(V,Σ,ω,P)G = (V, \Sigma, \omega, P):

  • VV (Alfabet Variabel): Simbol yang dapat digantikan oleh aturan produksi (misalnya F, G, H). Pada grafis TikZ, F menginstruksikan pena untuk maju melukis garis sejauh step.
  • Σ\Sigma (Alfabet Konstanta): Simbol kontrol gerakan pena:
    • + : Diputar berlawanan arah jarum jam sebesar sudut angle.
    • - : Diputar searah jarum jam sebesar sudut angle.
    • [ : Menyimpan koordinat dan arah pena saat ini ke dalam tumpukan (stack).
    • ] : Mengembalikan posisi dan arah pena dari tumpukan (digunakan untuk membuat percabangan).
  • ω\omega (Aksioma / State Awal): String awal sebelum iterasi dimulai (misalnya axiom=F).
  • PP (Aturan Produksi / Production Rules): Aturan substitusi rekursif yang menggantikan setiap variabel dengan string baru pada setiap tingkat kedalaman (order).

Berikut adalah kode lengkap buatan Jose Luis Diaz untuk mengomputasi berbagai variasi kristal salju:

% Snowflakes with TikZ
% Author: Jose Luis Diaz (JLDiaz)
\documentclass{article}
\usepackage[textwidth=6cm]{geometry}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{center}
\setlength\PreviewBorder{10pt}%
\usetikzlibrary{lindenmayersystems}

% -------------------------------------------------------------
% Deklarasi Aturan L-System untuk Cabang Kristal Salju
% -------------------------------------------------------------
\pgfdeclarelindenmayersystem{A}{
  \rule{F -> FF[+F][-F]}
}

\pgfdeclarelindenmayersystem{B}{
  \rule{F -> ffF[++FF][--FF]}
}

\pgfdeclarelindenmayersystem{C}{
  \symbol{G}{\pgflsystemdrawforward}
  \rule{F -> F[+F][-F]FG[+F][-F]FG}
}

\pgfdeclarelindenmayersystem{D}{
  \symbol{G}{\pgflsystemdrawforward}
  \symbol{H}{\pgflsystemdrawforward}
  \rule{F -> H[+HG][-HG]G}
  \rule{G -> HF}
}

% Style Default untuk L-System
\tikzset{
  type/.style={
    l-system={#1, axiom=F, order=3, step=4pt, angle=60},
    blue, opacity=0.4, line width=.5mm, line cap=round
  },
}

% Makro Penggambar Kepingan Salju (Simetri Rotasi 6 Lipat)
\newcommand\drawsnowflake[2][scale=0.2]{
  \tikz[#1] \foreach \a in {0,60,...,300} {
    \draw[rotate=\a,#2] l-system;
  };
}

\begin{document}
\begin{center}

  % Variasi Sistem A dengan Berbagai Ketebalan Garis
  \foreach \width in {.2,.4,...,.8} {
    \drawsnowflake[scale=0.3]{type=A, line width=\width mm}
  }

  % Variasi Sistem A dengan Sudut 90 Derajat
  \foreach \width in {.2,.4,...,.8} {
    \drawsnowflake[scale=0.38]{type=A, l-system={angle=90}, line width=\width mm}
  }

  % Variasi Sistem B
  \foreach \width in {.2,.4,...,.8} {
    \drawsnowflake[scale=0.3]{type=B, line width=\width mm}
  }

  \foreach \width in {.2,.4,...,.8} {
    \drawsnowflake{type=B, l-system={angle=30}, line width=\width mm}
  }

  % Variasi Sistem C & D dengan Aksioma Berbeda
  \drawsnowflake[scale=0.24]{type=C, l-system={order=2}, line width=0.2mm}
  \drawsnowflake[scale=0.25]{type=C, l-system={order=2}, line width=0.4mm}
  \drawsnowflake[scale=0.25]{type=C, l-system={order=2,axiom=fF}, line width=0.2mm}
  \drawsnowflake[scale=0.32]{type=C, l-system={order=2,axiom=---fff+++F}, line width=0.2mm}

  \drawsnowflake[scale=0.38]{type=D, l-system={order=4,angle=60,axiom=GF}, line width=0.7mm}
  \drawsnowflake[scale=0.38]{type=D, l-system={order=4,angle=60,axiom=GfF}, line width=0.7mm}
  \drawsnowflake[scale=0.38]{type=D, l-system={order=4,angle=60,axiom=FG}, line width=0.7mm}
  \drawsnowflake[scale=0.38]{type=D, l-system={order=4,angle=60,axiom=FfG}, line width=0.7mm}

\end{center}
\end{document}

Keluaran kompilasi menghasilkan galeri kepingan salju dengan keanekaragaman bentuk kristal yang sangat memukau:

Snowflakes TikZ
Hasil Kompilasi Kristal Salju L-Systems TikZ


Pustaka bawaan TikZ \usetikzlibrary{lindenmayersystems} memungkinkan pengembang untuk mendefinisikan sistem pembacaan string fraktal secara otomatis tanpa perlu menulis rekursi manual yang rumit.

Sebagai contoh pada Sistem A:

\pgfdeclarelindenmayersystem{A}{
  \rule{F -> FF[+F][-F]}
}
  • Pada order=1, F berubah menjadi FF[+F][-F].
  • Pada order=2, setiap F di dalam string hasil dikembangkan lagi menjadi FF[+F][-F].
  • Pasangan kurung siku [+F] dan [-F] menciptakan dua ranting cabang simetris yang mencuat ke kiri dan ke kanan.

Kunci pembentukan kepingan salju utuh terletak pada perintah makro \drawsnowflake:

\newcommand\drawsnowflake[2][scale=0.2]{
  \tikz[#1] \foreach \a in {0,60,...,300} {
    \draw[rotate=\a,#2] l-system;
  };
}

Perintah \foreach \a in {0,60,...,300} menduplikasi dan memutar 1 cabang hasil L-System pada sudut 0,60,120,180,240,0^\circ, 60^\circ, 120^\circ, 180^\circ, 240^\circ, dan 300300^\circ.


Anda dapat mencoba beberapa eksperimen menarik untuk menciptakan pola kristal salju baru:

  1. Mengubah Sudut Rotasi (angle): Ubah angle=60 menjadi angle=45 untuk membuat kristal salju 8 lipat (8-fold symmetry) dengan perulangan \foreach \a in {0,45,...,315}.
  2. Mengubah Kedalaman Rekursi (order): Naikkan order=3 menjadi order=4 atau order=5 untuk menghasilkan cabang fraktal yang lebih halus dan padat.
  3. Pewarnaan Kustom: Ubah warna blue, opacity=0.4 menjadi cyan!80!black atau tambahkan gradasi efek kilauan es.

Kode TikZ karya Jose Luis Diaz ini merupakan contoh cemerlang bagaimana matematika L-Systems dan simetri rotasi dapat digabungkan di LaTeX. Hanya dengan beberapa baris aturan fraktal sederhana, kita dapat memproduksi puluhan kristal salju dengan presisi tinggi.


  1. Jose Luis Diaz, Snowflakes with TikZ, TeXample.net
  2. Przemyslaw Prusinkiewicz & Aristid Lindenmayer, The Algorithmic Beauty of Plants, Springer-Verlag, 1990.
  3. Till Tantau, The TikZ and PGF Manual, v3.1.10, 2024.

Ditulis oleh: Aan Triono
Lisensi: CC BY-SA 4.0