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.
Pendahuluan
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.
Kode Sumber LaTeX
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}Keluaran yang Dihasilkan
Setelah dikompilasi, kode di atas akan menghasilkan pola spiral seperti berikut:
Penjelasan Struktur Kode — Terperinci
1. Inisialisasi dan Pustaka
\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.
2. Konstanta Parameter
\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 ().\deviation: Nilai penyimpangan () untuk mengontrol seberapa cepat ukuran lingkaran bertambah besar dari pusat ke tepi.\fudge: Faktor skala penyesuai () untuk merapatkan atau merenggangkan lingkaran agar tidak saling tumpang tindih secara berlebihan.
3. Penghitung Area Kumulatif
\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.
4. Perhitungan Geometri Utama
\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 , yang setara dengan (dua kali Rasio Emas).\meanArea: Rata-rata area setiap lingkaran kecil.\minAreadan\midArea: Menentukan batas bawah dan rentang perubahan luas lingkaran agar ukurannya membesar secara bertahap seiring pergerakan ke luar pusat.
5. Loop Pengulangan dan Perhitungan Sudut
\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) * 180mengalikan indeks biji\bdengan lalu mengambil sisa bagi dengan . Hasilnya (dalam rentang ) dikalikan dengan sehingga diperoleh sudut dalam rentang . - Penggunaan fungsi
mod()sangat penting. Jika kita langsung menggunakan sudut kumulatif tanpa modulo, nilai sudut akan melebihi batas koordinat internal TeX () setelah biji ke-28, menyebabkan galat (error) “Dimension too large”.
6. Perhitungan Ukuran Biji
\pgfmathsetmacro{\sratio}{\b / \nbrcircles}
\pgfmathsetmacro{\smArea}{\minArea + \sratio * \midArea}
\pgfmathsetmacro{\smRadius}{sqrt(\smArea / pi) / 2 * \fudge}\sratio: Rasio posisi biji terhadap total biji (bernilai di pusat hingga 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 () lalu dikalikan dengan\fudgeuntuk penataan visual.
7. Akumulasi Posisi Radial dan Penggambaran
\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 . 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.
Analisis Visual dan Matematika
Pola yang dihasilkan menunjukkan keajaiban matematika alam:
- Sudut Emas (): 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 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.
Eksperimen Variasi TikZ
Anda dapat melakukan eksperimen menarik dengan memodifikasi parameter kode:
- Ubah Jumlah Biji:
Ganti
\nbrcircles {377}dengan bilangan Fibonacci lain seperti144(lebih renggang) atau987(sangat padat). - 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]; - Modifikasi Faktor Skala (
\fudge): Ubah\fudge {.62}menjadi0.8untuk membuat biji saling tumpang tindih membentuk pola mosaik padat, atau0.4untuk memberikan ruang kosong antar biji.
Kesimpulan
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.
Referensi
- David Convent, Sunflower pattern (Phyllotaxy), TeXample.net
- Jim Bumgardner, Circles, Spirals and Sunflowers, krazydad.com
- Till Tantau, The TikZ and PGF Manual, v3.1.10, 2024.
- Diskusi StackExchange, Dimension too large error with TikZ mod(), tex.stackexchange.com/questions/192028/
Ditulis oleh: Aan Triono
Lisensi: CC BY-SA 4.0





