Sri Yantra: Menggambar Diagram Geometri Suci Hindu di LaTeX

Sri Yantra (sering disebut juga Sri Chakra) adalah salah satu diagram geometris kuno yang paling kompleks secara matematis dari India, berasal dari sekitar abad ke-7 hingga ke-8 Masehi. Struktur visualnya melambangkan harmoni kosmos dan kesatuan energi maskulin (Shiva) serta feminin (Shakti).
Menggambar Sri Yantra secara manual adalah tantangan yang sangat berat karena memerlukan tingkat presisi koordinat yang sangat tinggi agar semua garis saling bertemu tepat pada titik-titik persilangannya. Dalam artikel ini, kita akan mempelajari bagaimana membuat diagram Sri Yantra yang presisi secara matematis menggunakan TikZ di LaTeX.
Pendahuluan
Secara geometris, Sri Yantra dibentuk oleh persilangan sembilan segitiga (4 segitiga menghadap ke atas mewakili energi maskulin Shiva, dan 5 segitiga menghadap ke bawah mewakili energi feminin Shakti).
Persilangan sembilan segitiga ini menghasilkan 43 segitiga kecil yang saling bertautan, dengan sebuah titik merah tunggal di bagian tengah yang disebut Bindu. Seluruh struktur ini dikelilingi oleh pola kelopak bunga teratai (8 kelopak pada lingkaran dalam dan 16 kelopak pada lingkaran luar) serta gerbang kuil persegi yang disebut Bhupura.
Karena kompleksitasnya yang sangat tinggi, sedikit saja pergeseran koordinat akan menghasilkan celah atau poligon kosong pada titik pertemuan garis. Kode di bawah ini menggunakan koordinat yang telah diverifikasi secara matematis melalui prosedur iteratif untuk memastikan tingkat presisi terbaik.
Kode LaTeX Lengkap
Berikut adalah kode LaTeX lengkap menggunakan library TikZ (backgrounds dan math) untuk menggambar Sri Yantra secara utuh:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{backgrounds,math}
\begin{document}
\pgfdeclarelayer{minus1}
\pgfdeclarelayer{minus2}
\pgfdeclarelayer{minus3}
\pgfsetlayers{minus3,minus2,minus1,background,main}
\begin{tikzpicture}
% Parameter Dasar
\def\cx{150}
\def\cy{150}
\def\scale{0.025}
\def\triangleData{%
{53.65669559977147}{123.20508075688774}{250}{246.34330440022853}{0}% D1
{52.984011026495736}{174.24660560764943}{50}{247.01598897350425}{1}% U1
{98.71823312733801}{220.03828947357886}{123.20508075688774}{201.281766872662}{1}% U3
{78.26467997914015}{197.92315674002487}{78.10499177949904}{221.73532002085986}{1}% U2
{90.4856922951427}{78.10499177949904}{160.66014976539617}{209.51430770485734}{0}% D3
{80.98384838952128}{103.12199145016105}{220.03828947357886}{219.0161516104787}{0}% D2
{114.9488500600036}{160.66014976539617}{103.12199145016105}{185.0511499399964}{1}% U4
{116.35142605010424}{134.30757626706648}{197.92315674002487}{183.64857394989576}{0}% D4
{124.61190803072795}{144.79777263138968}{174.24660560764943}{175.38809196927207}{0}% D5
}
% Makro untuk menggambar segitiga
% Penggunaan: \drawtriangle{x1}{y1}{x2}{y2}{x3}{y3}
\newcommand{\drawtriangle}[6]{%
\draw[thick] ({((#1-\cx)*\scale)},{(-(#2-\cy)*\scale)}) -- ({((#3-\cx)*\scale)},{(-(#4-\cy)*\scale)}) -- ({((#5-\cx)*\scale)},{(-(#6-\cy)*\scale)}) -- cycle;%
}
% Makro untuk membaca data segitiga dari larik (array)
% Argumen: left_x, top/base_y, center_y, right_x, tipe
\newcommand{\drawTriangleFromData}[5]{%
\ifnum#5=0
% Segitiga menghadap ke bawah
\drawtriangle{#1}{#2}{\cx}{#3}{#4}{#2}%
\else
% Segitiga menghadap ke atas
\drawtriangle{#1}{#2}{\cx}{#3}{#4}{#2}%
\fi
}
% Makro rekursif untuk memproses data segitiga
% Berhenti saat menemukan \relax sebagai argumen pertama
\def\processTriangleData#1#2#3#4#5{%
\ifx\relax#1\relax
% Akhir data tercapai
\else
\drawTriangleFromData{#1}{#2}{#3}{#4}{#5}%
\expandafter\processTriangleData
\fi
}
% Lingkaran Luar
\draw[thick, fill=white!30!white] (0,0) circle (2.5cm);
% Titik Pusat (Bindu)
\draw[fill=red] (0,0) circle (0.1cm);
% Menggambar semua segitiga dari data \triangleData
\expandafter\processTriangleData\triangleData\relax\relax\relax\relax\relax
% Tahap 11: Kelopak Bunga Teratai Luar (8 kelopak)
\begin{scope}[on background layer]
\draw [fill=yellow] circle (3cm);
\foreach \i [evaluate=\i as \start using 22.5+45*\i] in {0,...,7}
\draw[fill=green!30!black] (\start:2.5) .. controls ({\start-5}:2.85) and ({\start-17.5}:2.75) .. ({\start-22.5}:3) .. controls ({\start-27.5}:2.75) and ({\start-40}:2.85) .. ({\start-45}:2.5) arc [start angle={\start-45}, delta angle=45, radius=2.5cm]--cycle;
\end{scope}
% Tahap 12: Kelopak Bunga Teratai Luar (16 kelopak)
\begin{pgfonlayer}{minus1}
\draw [fill=orange] circle (3.5cm);
\foreach \i [evaluate=\i as \start using 11.25+22.5*\i] in {0,...,15}
\draw[fill=blue!30] (\start:3) .. controls ({\start-2.5}:3.35) and ({\start-8.75}:3.25) .. ({\start-11.25}:3.5) .. controls ({\start-13.75}:3.25) and ({\start-20}:3.35).. ({\start-22.5}:3) arc [start angle={\start-11.25}, delta angle=22.5, radius=3.5cm]--cycle;
\end{pgfonlayer}
% Tahap 13: Lingkaran Konsentris Luar
\begin{pgfonlayer}{minus2}
\draw [fill=yellow!39] circle (4cm);
\draw [line width=2mm, blue!70!black] circle (3.75cm);
\end{pgfonlayer}
% Tahap 14: Bhupura (Gerbang Kuil Kuadrat)
\begin{pgfonlayer}{minus3}
\node [fill=black, minimum size=8cm] (b) {};
\node [fill=black, minimum width=9.25cm, minimum height=3cm] (bh) {};
\node [fill=black, minimum height=9.25cm, minimum width=3cm] (bv) {};
\node [fill=black, minimum height=6mm, minimum width=6cm] at (bv.north) (bn) {};
\node [fill=black, minimum height=6mm, minimum width=6cm] at (bv.south) (bs) {};
\node [fill=black, minimum width=6mm, minimum height=6cm] at (bh.west) (bw) {};
\node [fill=black, minimum width=6mm, minimum height=6cm] at (bh.east) (be) {};
\draw [red!60!black,line width=1mm]%
(be.south west)-|(be.north east)-|(bh.north-|be.west)-|(b.north east)-|(bv.east|-bn.south)-|(bn.north east)-|(bn.south west)-|(b.north-|bv.west)-|(b.west|-bh.north)-|(bw.north east)-|(bw.south west)-|(bw.east|-bh.south)-|(b.south west)-|(bv.west|-bs.north)-|(bs.south west)-|(bs.north east)-|(bv.east|-b.south)-|(b.east|-bh.south)-|cycle;
\end{pgfonlayer}
\end{tikzpicture}
\end{document}Keluaran kode tersebut adalah sebagai berikut:

Penjelasan Detail Kode
Bagian-bagian penting dari kode LaTeX di atas dijelaskan secara rinci sebagai berikut:
1. Lapisan Latar Belakang (PGF Layers)
Untuk menggambar ornamen luar (seperti kelopak teratai dan Bhupura) di belakang segitiga utama, kita mendefinisikan beberapa lapisan khusus menggunakan PGF Layers:
\pgfdeclarelayer{minus1}
\pgfdeclarelayer{minus2}
\pgfdeclarelayer{minus3}
\pgfsetlayers{minus3,minus2,minus1,background,main}Lapisan ini diurutkan dari yang paling belakang (minus3) hingga yang paling depan (main). Hal ini memastikan elemen geometris utama di gambar paling depan tidak tertutup oleh warna latar belakang ornamen luar.
2. Transformasi Koordinat Dinamis
Koordinat asli segitiga diperoleh dari data SVG dengan pusat di dan radius 100. Di TikZ, kita menggunakan pusat dan radius 2.5cm. Oleh karena itu, kita mendefinisikan rumus transformasi:
- Skala: (
\scale) - Rumus Transformasi Sumbu X:
- Rumus Transformasi Sumbu Y:
Diimplementasikan dalam makro
\drawtriangle:
\newcommand{\drawtriangle}[6]{%
\draw[thick] ({((#1-\cx)*\scale)},{(-(#2-\cy)*\scale)}) -- ({((#3-\cx)*\scale)},{(-(#4-\cy)*\scale)}) -- ({((#5-\cx)*\scale)},{(-(#6-\cy)*\scale)}) -- cycle;%
}3. Pemrosesan Data Secara Rekursif (\processTriangleData)
Daripada menulis perintah \draw secara manual satu per satu untuk 9 segitiga, data koordinat segitiga disimpan dalam bentuk array di variabel \triangleData dengan format:
{left_x}{top/base_y}{center_y}{right_x}{tipe}
Makro \processTriangleData membaca data tersebut secara rekursif hingga menemukan token penutup \relax. Ini adalah teknik pemrograman makro TeX tingkat lanjut yang membuat kode menjadi jauh lebih ringkas.
4. Kurva Bezier untuk Kelopak Bunga Teratai
Kelopak bunga teratai digambar secara otomatis menggunakan perulangan \foreach dikombinasikan dengan kurva Bezier (.. controls ..):
\foreach \i [evaluate=\i as \start using 22.5+45*\i] in {0,...,7}
\draw[fill=green!30!black] (\start:2.5) .. controls ({\start-5}:2.85) and ({\start-17.5}:2.75) .. ({\start-22.5}:3) ...Dengan menentukan titik kendali (control points), TikZ membentuk kelopak bunga teratai melengkung yang mulus dan presisi pada sudut-sudut tertentu.
5. Bhupura (Gerbang Persegi)
Bhupura (benteng luar) dibentuk dengan menumpuk beberapa bentuk node persegi (node) berwarna hitam secara vertikal dan horizontal untuk menciptakan siluet gerbang bercabang empat, lalu digarisbawahi dengan tepi merah menggunakan perintah \draw tunggal yang melintasi sepanjang batas luar node.
Cara Mengompilasi Dokumen
- Pastikan sistem editor LaTeX Anda telah terpasang (TeX Live, MiKTeX, atau Overleaf).
- Salin kode di atas dan simpan dengan nama
sri-yantra.tex. - Kompilasi dokumen menggunakan compiler pdfLaTeX atau XeLaTeX.
- Kelas
standalonedengan opsiborder=2mmakan otomatis menghasilkan gambar PDF yang terpotong rapi sesuai dengan ukuran desain (tidak menyisakan ruang putih A4 kosong).
Kesimpulan
Sri Yantra merupakan contoh luar biasa bagaimana geometri kuno mengandung kerumitan matematis yang mendalam. Melalui kekuatan makro pemrograman TeX dan pustaka grafis TikZ di LaTeX, diagram mistis ini dapat direkonstruksi secara presisi, menjadikannya objek studi yang menarik baik dari sudut pandang matematika maupun pemrograman grafis. Selamat belajar dan berkreasi!




