Daftar Isi

Menggambar Pola Sunflower (Phyllotaxis) dengan TikZ di LaTeX

Artikel ini menyajikan analisis estetika dan penjelasan matematis terperinci mengenai cara menggambar pola phyllotaxis (sunflower) menggunakan paket TikZ di LaTeX.


Phyllotaxis (atau filotaksis) adalah aturan pengaturan daun, kelopak bunga, atau biji pada tanaman. Salah satu fenomena alam paling menawan adalah pola spiral pada kepala bunga matahari (sunflower). Pola ini tidak terbentuk secara acak, melainkan mengikuti aturan matematika yang sangat presisi yang melibatkan Rasio Emas (Golden Ratio) dan Sudut Emas (Golden Angle).

Dalam dunia grafika berbasis LaTeX, kita dapat mereproduksi keindahan alam ini secara presisi menggunakan paket TikZ. Artikel ini membahas kode TikZ karya David Convent yang mengadaptasi tutorial “Circles, Spirals and Sunflowers” dari Jim Bumgardner. Kita akan membedah bagaimana logika matematika diimplementasikan ke dalam baris-baris kode LaTeX untuk menciptakan visualisasi phyllotaxis yang menakjubkan.


Berikut adalah kode lengkap untuk menggambar pola phyllotaxis menggunakan TikZ:

% Phyllotaxy
% Author: David Convent
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{calc}

\def\nbrcircles {377}
\def\outerradius {30mm}
\def\deviation {.9}
\def\fudge {.62}

\newcounter{cumulArea}
\setcounter{cumulArea}{0}

\begin{document}
\begin{tikzpicture}[scale=.32]
  \pgfmathsetmacro {\goldenRatio} {(1+sqrt(5))}
  \pgfmathsetmacro {\meanArea} {pow(\outerradius * 10 / \nbrcircles, 2) * pi}
  \pgfmathsetmacro {\minArea} {\meanArea * (1 - \deviation)}
  \pgfmathsetmacro {\midArea} {\meanArea * (1 + \deviation) - \minArea}
  
  \foreach \b in {0,...,\nbrcircles}{
    % mod() must be used in order to calculate the right angle.
    % otherwise, when \b is greater than 28 the angle is greater
    % than 16384 and an error is raised ('Dimension too large').
    % -- thx Tonio for this one.
    \pgfmathsetmacro{\angle}{mod(\goldenRatio * \b, 2) * 180}
    \pgfmathsetmacro{\sratio}{\b / \nbrcircles}
    \pgfmathsetmacro{\smArea}{\minArea + \sratio * \midArea}
    \pgfmathsetmacro{\smRadius}{sqrt(\smArea / pi) / 2 * \fudge}
    \addtocounter{cumulArea}{\smArea};
    \pgfmathparse{sqrt(\value{cumulArea} / pi) / 2}
    \fill[] (\angle:\pgfmathresult) circle [radius=\smRadius] ;
  }
\end{tikzpicture}
\end{document}

Setelah dikompilasi, kode di atas akan menghasilkan pola spiral seperti berikut:

Pola Sunflower (Phyllotaxis)
Pola Sunflower (Phyllotaxis)


\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{calc}
  • standalone: Kelas dokumen ini digunakan agar output kompilasi berupa PDF atau gambar tunggal yang ukurannya pas dengan objek gambar, tanpa margin halaman standar.
  • calc: Pustaka (library) TikZ yang memungkinkan operasi perhitungan koordinat yang kompleks.
\def\nbrcircles {377}
\def\outerradius {30mm}
\def\deviation {.9}
\def\fudge {.62}
  • \nbrcircles: Jumlah total lingkaran (biji) yang akan digambar. Angka 377 dipilih karena merupakan salah satu bilangan dalam deret Fibonacci, yang secara alami sering muncul pada pola spiral tanaman.
  • \outerradius: Jari-jari lingkaran terluar keseluruhan desain (30 mm30\text{ mm}).
  • \deviation: Nilai penyimpangan (0.90.9) untuk mengontrol seberapa cepat ukuran lingkaran bertambah besar dari pusat ke tepi.
  • \fudge: Faktor skala penyesuai (0.620.62) untuk merapatkan atau merenggangkan lingkaran agar tidak saling tumpang tindih secara berlebihan.
\newcounter{cumulArea}
\setcounter{cumulArea}{0}

Mendefinisikan penghitung (counter) LaTeX bernama cumulArea untuk melacak jumlah area total lingkaran yang telah digambar. Ini akan digunakan untuk menghitung jarak radial setiap lingkaran dari titik pusat.

\pgfmathsetmacro {\goldenRatio} {(1+sqrt(5))}
\pgfmathsetmacro {\meanArea} {pow(\outerradius * 10 / \nbrcircles, 2) * pi}
\pgfmathsetmacro {\minArea} {\meanArea * (1 - \deviation)}
\pgfmathsetmacro {\midArea} {\meanArea * (1 + \deviation) - \minArea}
  • \goldenRatio: Nilai ini didefinisikan sebagai 1+51 + \sqrt{5}, yang setara dengan 2Φ2\Phi (dua kali Rasio Emas).
  • \meanArea: Rata-rata area setiap lingkaran kecil.
  • \minArea dan \midArea: Menentukan batas bawah dan rentang perubahan luas lingkaran agar ukurannya membesar secara bertahap seiring pergerakan ke luar pusat.
\foreach \b in {0,...,\nbrcircles}{
  \pgfmathsetmacro{\angle}{mod(\goldenRatio * \b, 2) * 180}

Di sinilah letak keajaiban matematika. Setiap biji tanaman ditempatkan pada sudut yang merupakan kelipatan dari Sudut Emas.

  • Rumus mod(\goldenRatio * \b, 2) * 180 mengalikan indeks biji \b dengan 2Φ2\Phi lalu mengambil sisa bagi dengan 22. Hasilnya (dalam rentang [0,2)[0, 2)) dikalikan dengan 180180^\circ sehingga diperoleh sudut dalam rentang [0,360)[0^\circ, 360^\circ).
  • Penggunaan fungsi mod() sangat penting. Jika kita langsung menggunakan sudut kumulatif tanpa modulo, nilai sudut akan melebihi batas koordinat internal TeX (1638416384) setelah biji ke-28, menyebabkan galat (error) “Dimension too large”.
  \pgfmathsetmacro{\sratio}{\b / \nbrcircles}
  \pgfmathsetmacro{\smArea}{\minArea + \sratio * \midArea}
  \pgfmathsetmacro{\smRadius}{sqrt(\smArea / pi) / 2 * \fudge}
  • \sratio: Rasio posisi biji terhadap total biji (bernilai 00 di pusat hingga 11 di tepi luar).
  • \smArea: Menghitung area biji saat ini secara linier. Biji di tepi luar memiliki area yang lebih besar dibanding di pusat.
  • \smRadius: Mengonversi area kembali menjadi jari-jari lingkaran (r=Area/πr = \sqrt{\text{Area}/\pi}) lalu dikalikan dengan \fudge untuk penataan visual.
  \addtocounter{cumulArea}{\smArea};
  \pgfmathparse{sqrt(\value{cumulArea} / pi) / 2}
  \fill[] (\angle:\pgfmathresult) circle [radius=\smRadius] ;
}
  • \addtocounter{cumulArea}{\smArea}: Menambahkan area biji saat ini ke total area kumulatif.
  • \pgfmathparse{...}: Menghitung jarak radial biji dari pusat menggunakan rumus akar area kumulatif dibagi π\pi. Metode ini memastikan bahwa kerapatan (densitas) biji di seluruh permukaan sunflower tetap seragam dan konisten.
  • \fill[]: Menggambar lingkaran hitam pada koordinat polar (\angle:\pgfmathresult) dengan jari-jari \smRadius.

Pola yang dihasilkan menunjukkan keajaiban matematika alam:

  • Sudut Emas (137.5137.5^\circ): Sudut ini merupakan sudut irasional terbaik untuk membagi ruang lingkaran secara efisien tanpa menyisakan celah besar atau menyebabkan penumpukan biji pada garis lurus tertentu.
  • Deret Fibonacci: Pengaturan spiral searah jarum jam dan berlawanan arah jarum jam pada kepala bunga matahari selalu membentuk dua bilangan Fibonacci berurutan (misalnya 34 dan 55, atau 55 dan 89). Pada gambar di atas, penggunaan 377377 lingkaran (bilangan Fibonacci ke-14) menegaskan struktur simetri alami ini.
  • Kepadatan Konstan: Berkat penggunaan area kumulatif untuk menentukan koordinat radial, kerapatan biji tidak berkurang di bagian luar, menciptakan distribusi yang sangat seimbang.

Anda dapat melakukan eksperimen menarik dengan memodifikasi parameter kode:

  1. Ubah Jumlah Biji: Ganti \nbrcircles {377} dengan bilangan Fibonacci lain seperti 144 (lebih renggang) atau 987 (sangat padat).
  2. Tambahkan Gradasi Warna: Alih-alih warna hitam polos (\fill[]), Anda bisa menambahkan efek gradasi warna berdasarkan indeks \b:
    \definecolor{mycolor}{Hsb}{\b*0.8, 0.8, 0.9}
    \fill[mycolor] (\angle:\pgfmathresult) circle [radius=\smRadius];
  3. Modifikasi Faktor Skala (\fudge): Ubah \fudge {.62} menjadi 0.8 untuk membuat biji saling tumpang tindih membentuk pola mosaik padat, atau 0.4 untuk memberikan ruang kosong antar biji.

Kode LaTeX TikZ karya David Convent ini membuktikan bagaimana rumus matematika yang sederhana dapat menghasilkan bentuk alami yang sangat indah dan teratur. Melalui kalkulasi sudut emas dan integrasi area kumulatif, kita dapat mendesain visualisasi botani dengan presisi tinggi langsung dari editor dokumen LaTeX kita.


  1. David Convent, Sunflower pattern (Phyllotaxy), TeXample.net
  2. Jim Bumgardner, Circles, Spirals and Sunflowers, krazydad.com
  3. Till Tantau, The TikZ and PGF Manual, v3.1.10, 2024.
  4. Diskusi StackExchange, Dimension too large error with TikZ mod(), tex.stackexchange.com/questions/192028/

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