The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by hendi kurniawan, 2023-05-16 04:05:58

DASAR DESAIN GRAFIS

DASAR DESAIN GRAFIS

Keywords: DESAIN GRAFIS

Dr. Mars Caroline Wibowo, ST, M.Mm.Tech. JILID 1


Dr. Mars Caroline Wibowo. S.T., M.Mm.Tech 2009. Bio Data Penulis Penulis lahir di Semarang pada tanggal 1 Maret 1983. Penulis menempuh pendidikan Sarjana Teknik Elektro di Universitas Kristen Satya Wacana (UKSW), lulus tahun 2004, kemudian tahun 2005 melanjutkan studi pada Magister Desain pada Fakultas Seni Rupa dan Desain, Institut Teknologi Bandung (ITB), dan melanjutkan studi pada program studi Teknologi Multimedia pada Swinburne University of Technology Australia. Penulis sejak tahun 2010, menjadi dosen pada program studi Desain Grafis Universitas Sains dan Teknologi Komputer (Universitas STEKOM), memiliki jabatan fungsional Lektor 300 dan sedang proses mengajukan kenaikan jabatan fungsional menjadi Lektor Kepala. Penulis juga seorang wirausaha di bidang toko online yang berhasil di kota Semarang dan juga aktif sebagai freelancer dalam bidang fotografi, web design dan multimedia. JILID 1 YAYASAN PRIMAAGUS TEKNIK Jl. Majapahit No. 605 Semarang Telp. (024) 6723456. Fax. 024-6710144 Email : [email protected] PENERBIT : YP YAYASAN PRIMA AGUS TEKNIK


YAYASAN PRIMAAGUS TEKNIK Jl. Majapahit No. 605 Semarang Telp. (024) 6723456. Fax. 024-6710144 Email : [email protected] PENERBIT : Dr. Mars Caroline Wibowo, ST, M.Mm.Tech. JILID 1


DASAR DESAIN GRAFIS jilid 1 Dr. Joseph Teguh Santoso, S.Kom., M.Kom. Dr. Mars Caroline Wibowo. S.T., M.Mm.Tech Universitas STEKOM Bekerja sama dengan Universitas Sains & Teknologi Komputer (Universitas STEKOM) Dr. Mars Caroline Wibowo. S.T., M.Mm.Tech , S.Ds., M.Kom


iii KATA PENGANTAR Puji syukur kami panjatkan atas kehadirat Tuhan karena buku yang berjudul “Dasar Desain Grafis: Jilid 1” dapat terselesaikan. Grafis komputer adalah bidang yang berkembang pesat, sehingga spesifikasi pengetahuan itu adalah target yang bergerak. Oleh karena itu, dalam buku ini penulis melakukan yang terbaik untuk menghindari ketergantungan pada perangkat keras atau API tertentu. Pembaca didorong untuk melengkapi teks dengan dokumentasi yang relevan untuk perangkat lunak dan lingkungan perangkat keras mereka. Untungnya, budaya grafis komputer memiliki terminologi dan konsep standar yang cukup sehingga pembahasan dalam buku ini dapat dipetakan dengan baik ke sebagian besar lingkungan. Buku ini dibagi menjadi 2 Jilid. Jilid 1 terdiri dari 13 Bab, Bab Pertama buku jilid 1 ini memberikan definisi beberapa terminologi dasar dan memberikan beberapa latar belakang sejarah, serta sumber informasi yang berkaitan dengan komputer grafis. Bab 2 ini tidak dimaksudkan untuk membahas materi secara menyeluruh; sebaliknya intuisi dan interpretasi geometris yamh sangat ditekankan. Bab 3 Dalam bab ini, kita membahas dasar-dasar gambar dan tampilan raster, dengan memberikan perhatian khusus pada ketidaklinieran tampilan standar. Detail arti sebenarnya dari gambar. nilai piksel yang berhubungan dengan intensitas cahaya penting untuk diingat ketika kita membahas komputasi gambar di bab selanjutnya. Bab 4 mencakup metode dasar untuk pembangkitan sinar, perpotongan sinar, dan bayangan, yang cukup untuk mengimplementasikan pelacak sinar demonstrasi sederhana. Untuk sistem yang benar-benar berguna, teknik perpotongan sinar yang lebih efisien. Sedangkan Bab 5 meninjau aljabar linier dasar dari perspektif geometris, dengan fokus pada intuisi dan algoritma yang bekerja dengan baik dalam kasus dua dan tiga dimensi. Bab 6 membahas mengenai transformasi geometris seperti rotasi, translasi, scalling, dan proyeksi dapat diselesaikan dengan perkalian matriks, dan matriks transformasi yang digunakan untuk melakukan ini adalah pokok bahasan bab ini. Bab 7 menjelaskan bagaimana menggunakan transformasi matriks untuk mengekspresikan pandangan paralel atau perspektif. Transformasi dalam bab ini memproyeksikan titik 3D dalam scene (ruang dunia) ke titik 2D dalam gambar (ruang gambar), dan mereka akan memproyeksikan titik mana pun pada sinar tampilan piksel tertentu kembali ke posisi piksel tersebut dalam ruang gambar. Bab 8 akan membahas tentang fokus pada dasar-dasar umum seperti pipeline fan rasterisasi. Dalam bab 9, dimulai dengan meringkas pengambilan sampel dan rekonstruksi menggunakan contoh konkret satu dimensi dari audio digital. Kemudian, kami akan menyajikan matematika dasar dan algoritma yang mendasari pengambilan sampel dan rekonstruksi dalam satu dan dua dimensi. Bab 10 menyajikan metode bayangan heuristik yang paling umum. Diantaranya adalah difus dan phongshading, metode lain nya adalah naungan artistik, menggunakan konvensi artistik untuk memberi warna pada objek. Bab 11 membahas penggunaan tekstur untuk merepresentasikan detail permukaan, bayangan, dan pantulan.


iv Meskipun ide dasarnya sederhana, beberapa masalah praktis memperumit penggunaan tekstur. Bab 12 berbicara tentang beberapa kategori struktur data dasar dan tidak terkait yang termasuk di antara yang paling umum dan berguna: struktur mesh, struktur data spasial, grafis scene, dan array multidimensi bersusun. Bab terakhir dalam buku jilid 1 ini membahas beberapa teknik yang lebih menarik yang dapat digunakan untuk ray-trace berbagai scene yang lebih luas dan untuk memasukkan lebih banyak variasi efek. Buku Jilid 2 yang berjudul sama ini memiliki 13 bab yang akan membahas implementasi dan permodelan Dasar grafis komputer. Bab pertama dalam buku jilid 2 ini, akan membahas mesin untuk operasi probabilitas. Teknik-teknik ini juga akan terbukti berguna untuk mengevaluasi integral rumit secara numerik menggunakan integrasi Monte Carlo. Bab 2 membahas tentang Kurva, yang mencakup dengan permodelan geometris. Bab ke 3 akan memberikan gambaran tentang teknik dan algoritma yang langsung digunakan untuk membuat dan memanipulasi gerak. Bab 4 menjadi panduan pengantar untuk perangkat keras grafis dan dapat digunakan sebagai dasar untuk serangkaian praktik mingguan yang menyelidiki perangkat keras grafis. Dalam bab 5 ini, membahas masalah praktis pengukuran cahaya, biasanya disebut radiometri. Bab 6 membahas tentang Warna, yaitu membahas teori dan matematika tentang koreksi warna. Bab 7 memberikan gambaran sebagian tentang apa yang diketahui tentang persepsi visual pada orang. Sedangan bab 8 membahas tentang pemilihan algoritma nada yang dapat digunakan untuk menghitung tingkat adaptasi lokal untuk fungsi kompresi sigmoidal. Dalam bab 9 ini, membahas metode dan menjelaskan cara membangun model implisit kerangka secara lebih rinci. Bab ke 10 dalam buku ini membahas tentang globaliluminasi, seperti apakah yang dinamakan globaliluminati dan kegunaannya akan dibahas dalam bab ini. Bab 11 membahas beberapa aspek yang paling penting secara visual dari sifat material dan beberapa model yang cukup sederhana yang berguna dalam menangkap sifat-sifat ini. Ada banyak model BRDF yang digunakan dalam grafis, dan model yang disajikan di sini dimaksudkan untuk memberikan gambaran tentang BRDF yang tidak menyebar. Bab 12 penulis akan merinci pertimbangan khusus yang berlaku untuk grafis dalam pengembangan game, mulai dari platform tempat game dijalankan hingga proses produksi game. Bab akhir dalam buku jilid 2 ini akan menjelaskan tentang visualisasi. Visualisasi dapat digunakan untuk menghasilkan hipotesis baru ketika menjelajahi kumpulan data yang sama sekali tidak dikenal, untuk mengkonfirmasi hipotesis yang ada dalam kumpulan data yang dipahami sebagian, atau untuk menyajikan informasi tentang kumpulan data yang diketahui kepada audiens lain. Akhir kata semoga buku ini bermanfaat bagi para pembaca. Semarang, Februari 2022 Penulis Dr. Mars Caroline Wibowo, M.Mm.Tech.


v DAFTAR ISI Halaman Judul ......................................................................................................... i Daftar Isi ................................................................................................................. iii Kata Pengantar ........................................................................................................ iv BAB 1 PENDAHULUAN ............................................................................................. 1 1.1 Area Grafis .................................................................................................... 1 1.2 Aplikasi Utama .............................................................................................. 2 1.3 API Grafis ....................................................................................................... 2 1.4 Saluran Grafis ................................................................................................ 3 1.5 Masalah numerik .......................................................................................... 3 1.6 Efesiensi ........................................................................................................ 5 1.7 Desain dan Coding Program Desain .............................................................. 6 BAB 2 MACAM-MACAM MATEMATIKA .................................................................... 9 2.1 Mapping dan Pengaturan ............................................................................. 9 2.2 Memecahkan Persamaan Kuadrat ................................................................ 12 2.3 Trigonometri ................................................................................................. 14 2.4 Vektor ........................................................................................................... 17 2.5 Kurva dan Datar ............................................................................................ 26 2.6 Interpolasi Linear .......................................................................................... 39 2.7 Segitiga .......................................................................................................... 40 BAB 3 GAMBAR RASTER ........................................................................................... 46 3.1 Perangkat Raster ........................................................................................... 46 3.2 Gambar, Pixel, dan Geometri ....................................................................... 52 3.3 Warna RGB .................................................................................................... 56 3.4 Komposisi Alpha ............................................................................................ 58 BAB 4 RAY TRACING ................................................................................................ 61 4.1 Dasar Algoritma Ray-Tracing ........................................................................ 62 4.2 Komputasi Ray .............................................................................................. 64 4.3 Titik Potong Ray-Object ................................................................................ 67 4.4 Shading .......................................................................................................... 72 4.5 Program Ray-Tracing ..................................................................................... 75 4.6 Shadow (Bayangan) ...................................................................................... 76 4.7 Refleksi Spekuler Ideal .................................................................................. 78 4.8 Catatan Sejarah ............................................................................................. 79 BAB 5 ALJABAR LINIER ............................................................................................. 80 5.1 Determinan ................................................................................................... 80 5.2 Matriks .......................................................................................................... 82 5.3 Komputasi dengan Matrik dan Determinasi ................................................. 86 5.4 Eigenvalue dan Diagonalisasi Matriks .......................................................... 90


vi BAB 6 MATRIKS TRANSFORMASI .............................................................................. 95 6.1 Transformasi Linier 2D .................................................................................. 95 6.2 Transformasi Linier 3D .................................................................................. 106 6.3 Translasi dan Transformasi Afin .................................................................... 109 6.4 Invers dari Transformasi Matriks .................................................................. 112 6.5 Transformasi Koordinat ................................................................................ 113 BAB 7 VIEWING ....................................................................................................... 117 7.1 Melihat Transformasi .................................................................................... 117 7.2 Transformasi Proyektif .................................................................................. 123 7.3 Proyeksi Perspektif ....................................................................................... 127 7.4 Beberapa Sifat Transformasi Perspektif ....................................................... 130 7.5 FoV (Field-of-View) ....................................................................................... 130 BAB 8 SALURAN GRAFIS ........................................................................................... 133 8.1 Rasterisasi ..................................................................................................... 134 8.2 Operasi Sebelum dan Setelah Rasterisasi ..................................................... 145 8.3 Anti Aliasing Sederhana ................................................................................ 151 8.4 Memusnahkan Primitifisasi demi Efisiensi ................................................... 152 BAB 9 PEMROSESAN SINYAL .................................................................................... 155 9.1 Audio Digital: Sampling di ID ........................................................................ 156 9.2 Konvolusi ....................................................................................................... 158 9.3 Filter Konvolusi ............................................................................................. 160 9.4 Pemrosesan Sinyal untuk Gambar ................................................................ 171 9.5 Teori Sampling .............................................................................................. 186 BAB 10 SHADING PERMUKAAN ................................................................................ 200 10.1 Shading Diffuse ............................................................................................. 200 10.2 Shading Phong .............................................................................................. 203 10.3 Shading Artistik.............................................................................................. 206 BAB 11 MAPPING TEKSTUR ...................................................................................... 208 11.1 Mencari Nilai Tekstur .................................................................................... 208 11.2 Fungsi Koordinat Tekstur .............................................................................. 211 11.3 Pencarian Tekstur Antialiasing ...................................................................... 223 11.4 Aplikasi Mapping Tekstur ............................................................................. 229 11.5 Tekstur 3D Prosedural .................................................................................. 234 BAB 12 STRUKTUR DATA GRAFIS .............................................................................. 240 12.1 Triangle meshes ............................................................................................ 240 12.2 Grafis Scene .................................................................................................. 254 12.3 Struktur Data Spasial .................................................................................... 256 12.4 Pohon BSP untuk Visibilitas .......................................................................... 267 12.5 Tiling Multidimensi Array .............................................................................. 275 BAB 13 RAY TRACING LEBIH DALAM LAGI ................................................................. 279 13.1 Refraksi dan Transparansi ............................................................................. 279


vii 13.2 Instance ......................................................................................................... 282 13.3 Geometri Solid Konstruktif ........................................................................... 283 13.4 Distribusi Ray Tracing .................................................................................... 285 DAFTAR PUSTAKA .................................................................................................... 294


1 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) BAB 1 PENDAHULUAN Pengantar Istilah grafis komputer menggambarkan segala sesuatu yang menggunakan komputer untuk membuat dan memanipulasi gambar. Buku ini menyediakan algoritma dan alat matematika yang dapat Anda gunakan untu k membuat semua jenis gambar, termasuk efek visual fotorealistik, ilustrasi teknis yang informatif, dan animasi komputer yang indah. Grafis bisa dua dimensi atau tiga dimensi. Gambar dapat sepenuhnya digabungkan atau dibuat dengan memproses foto. Buku ini adalah tentang algoritma dan matematika dasar, khususnya matematika yang digunakan untuk membuat gambar komposit objek dan scene 3D. Sebenarnya melakukan pekerjaan dalam komputer grafis membutuhkan pengetahuan tentang perangkat keras tertentu, format file, dan API grafis. Catatan : API: application program interface/antarmuka program aplikasi. 1.1 AREA GRAFIS Menerapkan kategori pada bidang apa pun berbahaya, tetapi sebagian besar praktisi grafis akan setuju pada bidang utama grafis komputer berikut: Modelling berkaitan dengan spesifikasi matematis dari bentuk dan tampilan properti dengan cara yang dapat disimpan di komputer. Misalnya, cangkir kopi dapat digambarkan sebagai sekumpulan titik 3D yang berurutan bersama dengan beberapa aturan interpolasi untuk menghubungkan titik-titik tersebut dan model pantulan yang menjelaskan interaksi cahaya pertunjukan dengan cangkir. Rendering adalah istilah yang diwarisi dari seni dan berurusan dengan pembuatan gambar berbayang dari model komputer 3D. Animasi adalah teknik untuk menciptakan ilusi gerak melalui rangkaian gambar. Animasi menggunakan pemodelan dan rendering tetapi menambahkan masalah utama pergerakan dari waktu ke waktu, yang biasanya tidak dibahas dalam pemodelan dan rendering dasar. Ada banyak area lain yang melibatkan grafis komputer Area terkait tersebut meliputi: User Interaction/Interaksi pengguna berurusan dengan antarmuka antara perangkat input seperti mouse dan tablet, aplikasi, umpan balik (feedback) ke pengguna dalam gambar, dan umpan balik sensorik lainnya. Secara historis, area ini terkait dengan grafis sebagian besar karena peneliti grafis memiliki beberapa akses paling awal ke perangkat input/output yang sekarang ada di mana-mana. Virtual Reality untuk memasukkan pengguna ke dalam dunia virtual 3D. Ini biasanya membutuhkan setidaknya stereografis dan respons terhadap gerakan kepala. Virtual reality yang nyata, umpan balik suara dan kekuatan harus disediakan juga. Karena area ini memerlukan grafis 3D canggih dan teknologi tampilan canggih, area ini sering dikaitkan dengan grafis. Visualisasi mencoba memberi pengguna wawasan tentang informasi kompleks melalui tampilan visual. Seringkali ada masalah grafis yang harus diatasi dalam masalah visualisasi. Image Processing/Pemrosesan gambar berhubungan dengan manipulasi gambar 2D dan digunakan baik dalam bidang grafis maupun penglihatan.


2 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) 3D Scanning/Pemindaian 3D menggunakan teknologi pencarian jarak untuk membuat model 3D terukur. Model seperti itu berguna untuk menciptakan gambar visual yang kaya, dan pemrosesan model seperti itu sering kali membutuhkan algoritma grafis Fotografi komputasional adalah penggunaan grafis komputer, visi komputer, dan metode pemrosesan gambar untuk memungkinkan cara baru menangkap objek, scene, dan lingkungan secara fotografis 1.2 APLIKASI UTAMA Hampir semua hal menggunakan grafis komputer, tetapi konsumen utama teknologi grafis komputer meliputi industri berikut: • Video Game semakin banyak menggunakan model dan algoritma rendering 3D yang canggih. • Kartun sering ditampilkan langsung dari model 3D. Banyak kartun 2D tradisional menggunakan latar belakang yang dirender dari model 3D, yang memungkinkan sudut pandang yang terus bergerak tanpa banyak waktu artis. • Efek visual menggunakan hampir semua jenis teknologi grafis komputer. Hampir setiap film modern menggunakan pengomposisian digital untuk menempatkan latar belakang dengan latar depan yang difilmkan secara terpisah. Banyak film juga menggunakan pemodelan dan animasi 3D untuk menciptakan lingkungan sintetik, objek, dan bahkan karakter yang kebanyakan penonton tidak akan pernah menduga bahwa itu tidak nyata. • Film animasi menggunakan banyak teknik yang sama yang digunakan untuk efek visual, tetapi tanpa harus membidik gambar yang terlihat nyata. • CAD/CAM adalah singkatan dari computer-aided-design dan computer-aidedmanufacturing. Bidang-bidang ini menggunakan teknologi komputer untuk merancang komponen dan produk di komputer dan kemudian, menggunakan desain virtual ini, untuk memandu proses manufaktur. Misalnya, banyak bagian mekanis dirancang dalam paket pemodelan komputer 3D dan kemudian diproduksi secara otomatis pada perangkat penggilingan yang dikendalikan komputer. • Simulasi dapat dianggap sebagai permainan video yang akurat. Misalnya, simulator penerbangan menggunakan grafis 3D canggih untuk mensimulasikan pengalaman menerbangkan pesawat. Simulasi semacam itu dapat sangat berguna untuk pelatihan awal dalam domain kritis-keselamatan seperti mengemudi, dan untuk pelatihan skenario bagi pengguna berpengalaman seperti situasi khusus pemadam kebakaran yang terlalu mahal atau berbahaya untuk dibuat secara fisik. • Medical Imaging menciptakan gambar yang berarti dari data pasien yang dipindai. Misalnya, kumpulan data computed tomography (CT) terdiri dari array persegi panjang 3D yang besar dengan nilai kepadatan. Grafis komputer digunakan untuk membuat gambar berbayang yang membantu dokter mengekstrak informasi yang paling menonjol dari data tersebut. • Visualisasi informasi membuat gambar data yang tidak memiliki penggambaran visual yang “alami”. Misalnya, tren harga sementara saham sering kali berbeda tidak memiliki gambaran visual yang jelas, tetapi teknik grafis yang cerdas dapat membantu manusia melihat pola dalam data tersebut. 1.3 API GRAFIS Bagian penting dari penggunaan graphics libraries adalah graphicsAPI. Antarmuka program aplikasi/Application program interface (API) adalah kumpulan fungsi standar untuk


3 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) melakukan serangkaian operasi terkait, dan API grafis adalah seperangkat fungsi yang melakukan operasi dasar seperti menggambar gambar dan permukaan 3D ke dalam windows di layar. Setiap program grafis harus dapat menggunakan dua API terkait: API grafis untuk output visual dan API antarmuka pengguna untuk mendapatkan iput dari User. Saat ini ada dua paradigma dominan untuk grafis dan API antarmuka pengguna. Yang pertama adalah pendekatan terintegrasi, yang dicontohkan oleh Java, di mana grafis dan toolkit antarmuka pengguna terintegrasi dan paket portabel yang sepenuhnya distandarisasi dan didukung sebagai bagian dari bahasa. Yang kedua diwakili oleh Direct3D dan OpenGL, di mana perintah menggambar adalah bagian dari perpustakaan perangkat lunak yang terkait dengan bahasa seperti C++, dan perangkat lunak antarmuka pengguna adalah entitas independen yang mungkin berbeda dari sistem ke sistem. Dalam pendekatan yang terakhir ini, menulis kode portabel bermasalah, meskipun untuk program sederhana dimungkinkan untuk menggunakan lapisan pustaka portabel untuk merangkum kode antarmuka pengguna khusus sistem. Apa pun pilihan API Anda, panggilan grafis dasar sebagian besar akan sama, dan konsep buku ini akan berlaku. 1.4 SALURAN GRAFIS Setiap komputer desktop saat ini memiliki saluran grafis 3D yang kuat. Ini adalah subsistem perangkat lunak/perangkat keras khusus yang secara efisien menggambar primitif 3D dalam perspektif. Biasanya sistem ini dioptimalkan untuk memproses segitiga 3D dengan simpul bersama. Operasi dasar dalam pipeline memetakan lokasi vertex 3D ke posisi layar 2D dan menaungi segitiga sehingga keduanya terlihat realistis dan muncul dalam urutan back-tofront yang tepat. Meskipun menggambar segitiga dengan urutan back-to-front yang valid merupakan masalah penelitian paling penting dalam grafis komputer, sekarang hampir selalu diselesaikan dengan menggunakan buffer-z, yang menggunakan buffer memori khusus untuk menyelesaikan masalah dengan cara yang kasar. Ternyata manipulasi geometris yang digunakan dalam saluran grafis dapat diselesaikan hampir seluruhnya dalam ruang koordinat 4D yang terdiri dari tiga koordinat geometris tradisional dan koordinat homogen keempat yang membantu tampilan perspektif. Koordinat 4D ini dimanipulasi menggunakan matriks 4 × 4 dan 4-vektor. Oleh karena itu, pipeline grafis berisi banyak mesin untuk memproses dan menyusun matriks dan vektor tersebut secara efisien. Sistem koordinat 4D ini adalah salah satu konstruksi paling halus dan indah yang digunakan dalam ilmu komputer, dan tentu saja merupakan rintangan intelektual terbesar yang harus dilewati ketika mempelajari grafis komputer. Sebagian besar bagian pertama dari setiap buku grafis berhubungan dengan koordinat ini. Kecepatan di mana gambar dapat dihasilkan sangat bergantung pada jumlah segitiga yang digambar. Karena interaktivitas lebih penting dalam banyak aplikasi daripada kualitas visual, sangat bermanfaat untuk meminimalkan jumlah segitiga yang digunakan untuk mewakili model. Selain itu, jika model dilihat dari jauh, segitiga yang dibutuhkan lebih sedikit daripada jika model dilihat dari jarak yang lebih dekat. Hal ini menunjukkan bahwa sangat berguna untuk merepresentasikan model dengan berbagai tingkat detail/level of detail (LOD). 1.5 MASALAH NUMERIK Banyak program grafis sebenarnya hanya kode numerik 3D. Isu numerik seringkali penting dalam program semacam itu. Di "masa lalu", sangat sulit untuk menangani masalah seperti itu dengan cara yang kuat dan portabel karena mesin memiliki representasi internal


4 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) yang berbeda untuk angka, dan lebih buruk lagi, menangani pengecualian dengan cara yang berbeda dan tidak kompatibel. Untungnya, hampir semua komputer modern sesuai dengan standar titik mengambang IEEE (Asosiasi Standar IEEE, 1985). Hal ini memungkinkan programmer untuk membuat banyak asumsi nyaman tentang bagaimana kondisi numerik tertentu akan ditangani. Catatan : IEEE floating-point memiliki dua representasi untuk nol, satu yang diperlakukan sebagai positif dan satu yang diperlakukan sebagai negatif. Perbedaan antara – 0 dan +0 hanya kadang-kadang penting, tetapi perlu diingat untuk saat-saat ketika itu penting. Meskipun IEEE floating-point memiliki banyak fitur yang berharga saat mengkodekan algoritma numerik, hanya ada beberapa yang penting untuk diketahui untuk sebagian besar situasi yang dihadapi dalam grafis. Pertama, dan yang paling penting, adalah memahami bahwa ada tiga nilai "khusus" untuk bilangan real di titik-mengambang IEEE: 1. Tak terhingga (∞). Ini adalah angka valid yang lebih besar dari semua angka valid lainnya. 2. Minus tak terhingga (−∞). Ini adalah nomor valid yang lebih kecil dari semua nomor valid lainnya. 3. Not an number (NaN). Ini adalah bilangan yang tidak valid yang muncul dari operasi dengan konsekuensi yang tidak ditentukan, seperti nol dibagi dengan nol. Perancang IEEE floating-point membuat beberapa keputusan yang sangat nyaman bagi programmer. Banyak dari ini berhubungan dengan tiga nilai khusus di atas dalam menangani pengecualian seperti pembagian dengan nol. Dalam kasus ini, pengecualian dicatat, tetapi dalam banyak kasus, pemrogram dapat mengabaikannya. Secara khusus, untuk sembarang bilangan real positif a, aturan berikut yang melibatkan pembagian dengan nilai tak hingga berlaku: +a/(+∞) = +0 , −a/(+∞)=−0, +a/(−∞)=−0, −a/(−∞) = +0 . Operasi lain yang melibatkan nilai tak terhingga berperilaku seperti yang diharapkan. Sekali lagi untuk a positif, perilakunya adalah sebagai berikut: ∞+∞ =+∞, ∞−∞= NaN, ∞×∞=∞, ∞/∞ = NaN, ∞/a =∞, ∞/0=∞, 0/0=NaN. Aturan dalam ekspresi Boolean yang melibatkan nilai tak hingga adalah seperti yang diharapkan: 1. Semua bilangan valid hingga kurang dari +∞. 2. Semua bilangan valid berhingga lebih besar dari -∞. 3. -∞ lebih kecil dari +∞ Aturan yang melibatkan ekspresi yang memiliki nilai NaN sederhana: 1. Ekspresi aritmatika apa pun yang menyertakan NaN menghasilkan NaN. 2. Ekspresi Boolean apa pun yang melibatkanNaN salah. Mungkin aspek yang paling berguna dari titik IEEE adalah bagaimana pembagian dengan nol ditangani; untuk setiap bilangan real positif, aturan berikut yang melibatkan pembagian dengan nilai nol berlaku: +a/ +0 = +∞,


5 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) −a/ +0 =−∞. Ada banyak perhitungan numerik yang menjadi lebih sederhana jika programmer memanfaatkan aturan IEEE. Misalnya, perhatikan ekspresi berikut ini: = 1 1 + 1 Ekspresi seperti itu muncul dengan resistor dan lensa. Jika pembagian dengan nol mengakibatkan crash program (seperti yang terjadi dalam banyak sistem sebelum titik mengambang IEEE), maka dua pernyataan if akan diperlukan untuk memeriksa nilai b atau c yang kecil atau nol. Sebaliknya, dengan IEEE floating-point, jika b dan c adalah Nol, maka kita akan mendapatkan nilai Nol juga untuk a seperti yang diinginkan. Teknik umum lainnya untuk menghindari pemeriksaan khusus adalah dengan memanfaatkan properti Boolean dari NaN. Perhatikan segmen kode berikut: a = f(x) Jika/if (a>0) maka/then lakukan yang lain Di sini, fungsi f dapat mengembalikan nilai “jelek” seperti ∞ atau NaN, tetapi kondisi if masih terdefinisi dengan baik: salah untuk a = NaN atau a = dan benar untuk a = +∞. Dengan hati-hati dalam memutuskan nilai mana yang dikembalikan, seringkali if dapat membuat pilihan yang tepat, tanpa memerlukan pemeriksaan khusus. Hal ini membuat program lebih kecil, lebih kuat, dan lebih efisien. 1.6 EFESIENSI Tidak ada aturan ajaib untuk membuat kode lebih efisien. Efisiensi dicapai melalui pengorbanan yang hati-hati, dan pengorbanan ini berbeda untuk arsitektur yang berbeda. Namun, untuk masa mendatang, heuristik yang baik adalah bahwa programmer harus lebih memperhatikan pola akses memori daripada jumlah operasi. Ini adalah kebalikan dari heuristik terbaik dua dekade lalu. Peralihan ini terjadi karena kecepatan memori tidak mengikuti kecepatan prosesor. Sejak tren itu berlanjut, pentingnya akses memori yang terbatas dan koheren untuk optimalisasi hanya akan meningkat. Pendekatan yang masuk akal untuk membuat kode cepat adalah dengan melanjutkan dalam urutan berikut, hanya mengambil langkah-langkah yang diperlukan: 1. Tulis kode dengan cara yang paling mudah. Hitung hasil antara sesuai kebutuhan pada y daripada menyimpannya. 2. Kompilasi dalam mode yang dioptimalkan. 3. Gunakan alat profil apa pun yang ada untuk menemukan hambatan kritis. 4. Periksa struktur data untuk mencari cara untuk meningkatkan lokalitas. Jika memungkinkan, buat ukuran unit data sesuai dengan ukuran cache/halaman pada arsitektur target. 5. Jika profil mengungkapkan hambatan dalam komputasi numerik, periksa kode perakitan yang dihasilkan oleh kompilator untuk mengetahui efisiensi yang terlewat. Tulis ulang source code untuk memecahkan masalah yang Anda temukan. Yang paling penting dari langkah-langkah ini adalah yang pertama. Sebagian besar "Optimalisasi" membuat kode lebih sulit dibaca tanpa mempercepat segalanya. Selain itu, waktu yang dihabiskan di muka untuk mengoptimalkan kode biasanya lebih baik dihabiskan untuk memperbaiki bug atau menambahkan fitur. Juga, waspadalah terhadap saran dari teksteks lama; beberapa trik klasik seperti menggunakan bilangan bulat alih-alih nyata mungkin tidak lagi menghasilkan kecepatan karena CPU modern biasanya dapat melakukan operasi titik mengambang secepat mereka melakukan operasi bilangan bulat. Dalam semua situasi,


6 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) pembuatan profil diperlukan untuk memastikan manfaat dari setiap optimasi untuk mesin dan kompiler tertentu. 1.7 DESAIN DAN CODING PROGRAM DESAIN Strategi umum tertentu sering berguna dalam pemrograman grafis. Di bagian ini kami memberikan beberapa saran yang mungkin berguna bagi Anda saat menerapkan metode yang Anda pelajari dalam buku ini. Desain Kelas Bagian utama dari setiap program grafis adalah untuk memiliki kelas atau rutinitas yang baik untuk entitas geometris seperti vektor dan matriks, serta entitas grafis seperti warna dan gambar RGB. Rutinitas ini harus dibuat sebersih dan seefisien mungkin. Sebuah pertanyaan desain universal adalah apakah lokasi dan perpindahan harus menjadi kelas yang terpisah karena mereka memiliki operasi yang berbeda, misalnya, lokasi dikalikan dengan setengah tidak masuk akal secara geometris sementara setengah dari perpindahan tidak. Ada sedikit kesepakatan tentang pertanyaan ini, yang dapat memicu perdebatan sengit selama berjam-jam di antara praktisi grafis, tetapi sebagai contoh mari kita asumsikan kita tidak akan membuat perbedaan. Ini menyiratkan bahwa beberapa kelas dasar yang akan ditulis meliputi: • vektor2. Kelas vektor 2D yang menyimpan komponen x-andy. Ini harus menyimpan komponen ini dalam array panjang-2 sehingga operator pengindeksan dapat didukung dengan baik. Anda juga harus memasukkan operasi untuk penjumlahan vektor, pengurangan vektor, perkalian titik, perkalian silang, perkalian skalar, dan pembagian skalar. • vektor3. Sebuah kelas vektor 3D analog dengan vektor2. • vektor. Sebuah vektor homogen dengan empat komponen . • rgb. Warna RGB yang menyimpan tiga komponen. Anda juga harus menyertakan operasi untuk penambahan RGB, pengurangan RGB, perkalian RGB, perkalian skalar, dan pembagian skalar • transform. Matriks 4x4 untuk transformasi. Anda harus menyertakan perkalian matriks dan fungsi anggota untuk diterapkan ke lokasi, arah, dan vektor normal permukaan. Seperti yang ditunjukkan dalam Bab 6, ini semua berbeda. • Image. Array 2D piksel RGB dengan operasi output. Selain itu, Anda mungkin tidak ingin menambahkan kelas untuk interval, basis ortonormal, dan bingkai koordinat. Mengapung vr Ganda Arsitektur modern menunjukkan bahwa menjaga penggunaan memori tetap rendah dan mempertahankan akses memori yang koheren adalah kunci efisiensi. Ini menyarankan menggunakan data presisi tunggal. Namun, menghindari masalah numerik menyarankan menggunakan doubleprecisionarithmetic. Pengorbanan tergantung pada programnya, tetapi bagus untuk memiliki default dalam definisi kelas Anda. Debugging Program Grafis Anda mungkin menemukan bahwa sebagai programmer menjadi lebih berpengalaman, mereka menggunakan debuggers tradisional dan kurang. Salah satu alasannya adalah bahwa menggunakan debugger seperti itu lebih canggung untuk program yang kompleks daripada untuk program yang sederhana. Alasan lain adalah bahwa kesalahan yang paling sulit adalah kesalahan konseptual di mana hal yang salah sedang diimplementasikan, dan mudah untuk membuang banyak waktu untuk melangkah melalui nilai-nilai variabel tanpa mendeteksi


7 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) kasus seperti itu. Kami telah menemukan beberapa strategi debugging yang sangat berguna dalam grafis. Metode Ilmiah Dalam program grafis ada alternatif untuk debugging tradisional yang seringkali sangat berguna. Kelemahannya adalah sangat mirip dengan apa yang diajarkan kepada programmer komputer untuk tidak dilakukan di awal karir mereka, jadi Anda mungkin merasa "nakal" jika Anda melakukannya: kami membuat gambar dan mengamati apa yang salah dengannya. Kemudian, kami mengembangkan hipotesis tentang apa yang menyebabkan masalah dan mengujinya. Misalnya, dalam program ray-tracing, kita mungkin memiliki banyak piksel gelap yang tampak acak. Ini adalah masalah " jerawat bayangan" klasik yang dialami kebanyakan orang saat mereka menulis pelacak. Debug tradisional tidak membantu di sini; sebaliknya, kita harus menyadari bahwa sinar bayangan mengenai permukaan yang diarsir. Kita mungkin memperhatikan bahwa warna bintik-bintik gelap adalah warna sekitar, jadi pencahayaan langsunglah yang hilang. Pencahayaan langsung dapat dimatikan dalam bayangan, jadi Anda mungkin berhipotesis bahwa titik-titik ini salah ditandai sebagai bayangan padahal sebenarnya tidak. Untuk menguji hipotesis ini, kita bisa mematikan pemeriksaan bayangan dan mengkompilasi ulang. Ini akan menunjukkan bahwa ini adalah tes bayangan palsu, dan kami dapat melanjutkan pekerjaan detektif kami. Alasan utama mengapa metode ini terkadang dapat menjadi praktik yang baik adalah karena kita tidak pernah harus menemukan nilai yang salah atau benar-benar menentukan kesalahan konseptual kita. Sebaliknya, kami hanya mempersempit kesalahan konseptual kami secara eksperimental. Biasanya hanya beberapa percobaan yang diperlukan untuk melacak semuanya, dan jenis debugging ini menyenangkan. Gambar sebagai Output Debugging Berkode Dalam banyak kasus, saluran termudah untuk mendapatkan informasi debug dari program grafis adalah gambar output itu sendiri. Jika Anda ingin mengetahui nilai beberapa variabel untuk bagian komputasi yang berjalan untuk setiap piksel, Anda dapat memodifikasi program Anda untuk sementara untuk menyalin nilai tersebut secara langsung ke gambar output dan melewatkan sisa penghitungan yang biasanya dilakukan. Misalnya, jika Anda menduga masalah dengan normal permukaan menyebabkan masalah dengan bayangan, Anda dapat menyalin vektor normal langsung ke gambar (x menjadi merah, y menjadi hijau, z menjadi biru), menghasilkan ilustrasi kode warna dari vektor yang sebenarnya digunakan dalam perhitungan Anda. Atau, jika Anda menduga nilai tertentu terkadang berada di luar rentang validnya, buat program Anda menulis piksel cerah di tempat yang terjadi. Trik umum lainnya termasuk menggambar sisi belakang permukaan dengan warna yang jelas (ketika seharusnya tidak terlihat), mewarnai gambar dengan nomor ID objek, atau mewarnai piksel dengan jumlah pekerjaan yang mereka lakukan untuk menghitung. Menggunakan Debugging Masih ada kasus, terutama ketika metode ilmiah tampaknya telah menyebabkan kontradiksi, ketika tidak ada pengganti untuk mengamati dengan tepat apa yang sedang terjadi. Masalahnya adalah bahwa program grafis sering kali melibatkan banyak, banyak eksekusi dari kode yang sama (misalnya, sekali per piksel, atau sekali per segitiga), sehingga sama sekali tidak praktis untuk melangkah melalui debugger dari awal. Dan bug yang paling sulit biasanya hanya terjadi untuk input yang rumit. Pendekatan yang berguna adalah "menetapkan jebakan" untuk bug. Pertama, pastikan program Anda deterministik—berjalan dalam satu utas dan pastikan bahwa semua bilangan acak dihitung dari benih tetap. Kemudian, cari tahu piksel atau segitiga mana yang menunjukkan bug dan tambahkan pernyataan sebelum kode yang Anda curigai salah yang


8 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) akan dieksekusi hanya untuk kasus yang dicurigai. Misalnya, jika Anda menemukan bahwa piksel (126.247) menunjukkan bug, tambahkan: if x = 126 dan y = 247 then print “gambar!” Jika Anda menyetel breakpoint pada pernyataan cetak, Anda dapat memasukkan debugger tepat sebelum piksel yang Anda minati dihitung. Beberapadebugger memiliki fitur "breakpoint bersyarat" yang dapat mencapai hal yang sama tanpa mengubah kode. Catatan: Mode debug khusus yang menggunakan seed nomor acak tetap berguna. Dalam kasus di mana program mogok, debugger tradisional berguna untuk menunjukkan dengan tepat situs mogok. Anda kemudian harus mulai melacak kembali dalam program, menggunakan asserts dan mengkompilasi ulang, untuk menemukan di mana letak kesalahan program. Pernyataan ini harus dibiarkan dalam program untuk kemungkinan bug di masa mendatang yang akan Anda tambahkan. Ini sekali lagi berarti proses langkah-melalui tradisional dihindari, karena itu tidak akan menambahkan pernyataan berharga ke program Anda. Visualisasi Data untuk Debugging Seringkali sulit untuk memahami apa yang sedang dilakukan program Anda, karena ia menghitung banyak hasil antara sebelum akhirnya salah. Situasinya mirip dengan eksperimen ilmiah yang mengukur banyak data, dan satu solusinya sama: buat plot dan ilustrasi yang bagus untuk Anda sendiri untuk memahami apa arti data itu. Misalnya, dalam ray tracer Anda dapat menulis kode untuk memvisualisasikan pohon ray sehingga Anda dapat melihat jalur apa yang berkontribusi pada piksel, atau dalam rutinitas pengambilan sampel ulang gambar, Anda dapat membuat plot yang menunjukkan semua titik di mana sampel diambil dari input. Waktu yang dihabiskan untuk menulis kode untuk memvisualisasikan keadaan internal program Anda juga terbayar dalam pemahaman yang lebih baik tentang perilakunya ketika tiba saatnya untuk mengoptimalkannya.


9 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) BAB 2 MACAM-MACAM MATEMATIKA Sebagian besar grafis hanya menerjemahkan matematika langsung ke dalam kode. Matematika bersih, kode hasil pembersih, sebagian besar dari buku ini berkonsentrasi pada penggunaan matematika yang tepat untuk pekerjaan itu. Bab ini mengulas berbagai alat dari matematika sekolah menengah dan perguruan tinggi dan dirancang untuk digunakan lebih sebagai referensi daripada sebagai tutorial. Ini mungkin tampak seperti campuran topik dan memang demikian; setiap topik dipilih karena agak tidak biasa dalam kurikulum matematika "standar", karena sangat penting dalam grafis, atau karena biasanya tidak diperlakukan dari sudut pandang geometris. Selain membangun ulasan tentang notasi yang digunakan dalam buku, bab ini juga menekankan beberapa poin yang terkadang dilewati dalam kurikulum standar sarjana, seperti koordinat barycentric pada segitiga. Sebuah diskusi tentang aljabar linier ditunda sampai Bab 5 sebelum matriks transformasi dibahas. Pembaca didorong untuk membaca sekilas bab ini untuk membiasakan diri dengan topik yang dibahas dan untuk merujuk kembali jika diperlukan. Latihan di akhir bab mungkin berguna dalam menentukan topik mana yang perlu disegarkan. 2.1 MAPPING DAN PENGATURAN Mapping, juga disebut fungsi, ini adalah dasar matematika dan pemrograman. Seperti fungsi dalam program, mapping dalam matematika mengambil argumen dari satu tipe dan memetakannya ke (mengembalikan) objek dari tipe tertentu. Dalam sebuah program kami mengatakan "ketik"; dalam matematika kita akan mengidentifikasi himpunan. Ketika kita memiliki objek yang merupakan anggota dari suatu himpunan, kita menggunakan simbol ϵ. Sebagai contoh, a ϵ S dapat dibaca “a adalah anggota himpunan S”. Diketahui dua himpunan A dan B, kita dapat membuat himpunan ketiga dengan mengambil produk Cartesian dari dua himpunan, dilambangkan dengan A × B. Himpunan A × B ini terdiri dari semua kemungkinan pasangan terurut (a,b) di mana a ϵ A dan b ϵ B. Sebagai singkatan, kami menggunakan notasi A2 untuk menunjukkan A×A. Kita dapat memperluas hasil kali Cartesian untuk membuat himpunan dari semua kemungkinan rangkap tiga terurut dari tiga himpunan dan seterusnya untuk tupel terurut panjang sewenang-wenang dari banyak himpunan sewenang-wenang. Commonset yang menarik termasuk • R—bilangan real; • R +—bilangan real nonnegatif (termasuk nol); • R 2—pasangan terurut dalam bidang 2D nyata; • R n—titik-titik dalam ruang Kartesius n-dimensi; • Z—bilangan bulat; • S 2—kumpulan titik 3D (titik di R3 ) pada unit bola. Perhatikan bahwa meskipun S2 terdiri dari titik-titik yang tertanam dalam ruang tiga dimensi, mereka berada di permukaan yang dapat diparameterisasi dengan dua variabel, sehingga dapat dianggap sebagai himpunan 2D. Notasi untuk mapping menggunakan tanda panah dan titik dua, misalnya: f : R → Z, yang dapat Anda baca sebagai "Ada fungsi yang disebut f yang mengambil bilangan real sebagai input dan peta untuk bilangan bulat." Di sini, himpunan yang muncul sebelum


10 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) panah disebut domain fungsi, dan himpunan di ruas kanan disebut target. Pemrogram komputer mungkin lebih nyaman dengan bahasa setara berikut: "Ada fungsi yang disebut f yang memiliki satu argumen nyata dan mengembalikan bilangan bulat." Dengan kata lain, notasi himpunan di atas setara dengan notasi pemrograman umum: bilangan bulat f(real) ← ekuivalen → f : R → Z. Jadi notasi tanda titik dua dapat dianggap sebagai sintaks pemrograman. Sesederhana itu. Titik f(a) disebut image dari a, dan bayangan himpunan A (subset dari domain) adalah himpunan bagian dari target yang memuat bayangan semua titik di A. Bayangan seluruh domain adalah disebut jangkauan fungsi. Gambar 2.1. Bijeksi dan fungsi invers f−1 . Perhatikan bahwa f-1 juga merupakan bijeksi. Invers Mapping Jika kita memiliki fungsi f : A → B, mungkin ada fungsi invers f−1 : B → A, yang didefinisikan oleh aturan f−1 (b)=a di mana b = f(a). Definisi ini hanya berfungsi jika setiap b ∈ B adalah bayangan dari suatu titik di bawah f (yaitu, jangkauannya sama dengan target) dan jika hanya ada satu titik tersebut (yaitu, hanya ada satu di mana f(a)=b). Mapping atau fungsi seperti itu disebut bijeksi. Sebuah bijeksi memetakan setiap a ∈ A ke b ∈ B unik, dan untuk setiap b ∈ B, ada tepat satu a ∈ A sedemikian rupa sehingga f(a)=b (Gambar 2.1). Bijeksi antara sekelompok penunggang dan kuda menunjukkan bahwa setiap orang menunggangi seekor kuda, dan setiap kuda ditunggangi. Dua fungsi akan menjadi pengendara (kuda) dan kuda (penunggang). Ini adalah fungsi terbalik satu sama lain. Fungsi yang bukan bijeksi tidak memiliki invers (Gambar 2.2). Contoh bijeksi adalah f : ℝ →ℝ, dengan f(x)=x3 . Fungsi inversnya adalah f−1 (x)= ∛x. Contoh ini menunjukkan bahwa notasi standar bisa agak aneh karena x digunakan sebagai variabel dummy di f dan f−1 . Terkadang lebih intuitif untuk menggunakan variabel dummy yang berbeda, dengan y = f(x) dan x = f−1 (y). Hasil ini semakin intuitif y= x3 dan x = ∛y. Contoh fungsi yang tidak memiliki invers adalah sqr : ℝ →ℝ, dimana sqr(x)=x2 . Ini benar karena dua alasan: pertama x2 =(−x)2, dan kedua tidak ada anggota domain yang memetakan ke bagian negatif dari target. Perhatikan bahwa kita dapat mendefinisikan invers jika kita membatasi domain dan jangkauan ke ℝ+. Maka x adalah invers yang valid.


11 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.2 Fungsi g tidak memiliki invers karena dua elemen d dipetakan ke elemen E yang sama. Fungsi h tidak memiliki invers karena elemen T dari F tidak memiliki elemen d yang dipetakan padanya. Interval Seringkali kita ingin menentukan bahwa suatu fungsi berhubungan dengan bilangan real yang dibatasi nilainya. Salah satu kendala tersebut adalah untuk menentukan interval. Contoh interval adalah bilangan real antara nol dan satu, tidak termasuk nol atau satu. Kami menunjukkan ini (0,1). Karena tidak menyertakan titik akhirnya, ini disebut sebagai interval terbuka. Interval tertutup yang sesuai, yang memang berisi titik akhirnya, dilambangkan dengan tanda kurung siku: [0,1]. Notasi ini dapat dicampur, yaitu [0,1] termasuk nol tetapi tidak satu. Saat menulis interval [a,b], kita asumsikan bahwa a ≤ b. Tiga cara umum untuk merepresentasikan interval ditunjukkan pada Gambar 2.3. Produk interval Cartesian sering digunakan. Misalnya, untuk menunjukkan bahwa suatu titik x berada dalam kubus satuan dalam 3D, kita katakan x ϵ [0,1]3 . Interval sangat berguna dalam hubungannya dengan operasi himpunan: Intersection / persimpangan, Union / penyatuan, dan Different / perbedaan. Misalnya, perpotongan dua interval adalah himpunan titik-titik yang memiliki kesamaan. Simbol digunakan untuk persimpangan. Misalnya, [3,5] ∩ [4,6] = [4,5]. Forunions, simbol digunakan untuk menunjukkan titik di salah satu interval. Misalnya, [3,5] ∪ [4,6] = [3,6]. Berbeda dengan dua operator pertama, operator perbedaan menghasilkan hasil yang berbeda tergantung pada urutan argumen. Gambar 2.3 (kiri atas) Tiga cara ekuivalen untuk menyatakan interval dari a ke b yang mencakup b tetapi tidak a. Tanda minus digunakan untuk operator selisih, yang mengembalikan titik-titik di interval kiri yang tidak juga di kanan. Misalnya, [3,5)−[4,6] = [3,4] dan [4,6]−[3,5] = [5,6]. Operasi ini sangat mudah untuk divisualisasikan menggunakan diagram interval (Gambar 2.4). Gambar 2.4 (gambar sebelah kanan ) Operasi interval pada [3,5) dan [4,6].


12 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Logaritma Meskipun tidak lazim hari ini seperti sebelum kalkulator, logaritma sering berguna dalam masalah di mana persamaan dengan istilah eksponensial muncul. Menurut definisi, setiap logaritma memiliki basis a. "Basis log a" dari x ditulis loga x dan didefinisikan sebagai "eksponen ke mana a harus dinaikkan untuk mendapatkan x," yaitu, y = loga x ↔ ay = x Perhatikan bahwa basis logaritma a dan fungsi yang menaikkan pangkat a adalah saling invers. Definisi dasar ini memiliki beberapa konsekuensi: a loga(x) = x; loga(ax )=x; loga(xy ) = loga x + loga y; loga(x/y) = loga x−loga y; loga x = loga b logb x Ketika kita menerapkan kalkulus pada logaritma, angka khusus e =2.718...sering muncul. Logaritma dengan basis e disebut logaritma natural. Kami mengadopsi singkatan umum ln untuk menunjukkannya: x ≡ loge x. Perhatikan bahwa simbol "≡" dapat dibaca "setara dengan definisi." Seperti π, nomor khusus e muncul dalam sejumlah konteks yang luar biasa. Banyak bidang menggunakan basis tertentu selain e untuk manipulasi dan menghilangkan basis dalam notasinya, yaitu log x. Misalnya, astronom sering menggunakan basis 10 dan ilmuwan komputer teoretis sering menggunakan basis 2. Karena grafis komputer meminjam teknologi dari banyak bidang, kita akan menghindari singkatan ini. Turunan dari logaritma dan eksponen menjelaskan mengapa logaritma natural adalah “natural”: = ; = Pengganda konstanta di atas hanya satu untuk a = e. 2.2 MEMECAHKAN PERSAMAAN KUADRAT Persamaan kuadrat memiliki bentuk Ax2 + Bx + C = 0 Di mana x tidak diketahui nyata, dan A, B, dan C adalah konstanta yang diketahui. Jika Anda memikirkan plot 2D xy dengan y = Ax2 + Bx+ C, solusinya adalah apa pun nilai x yang merupakan “nol persilangan” di y. Karena y = Ax2 + Bx + C adalah parabola, maka akan ada nol, satu, atau dua solusi nyata tergantung pada apakah parabola meleset, menyerempet, atau menyentuh sumbu x (Gambar 2.5).


13 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.5. Interpretasi geometrik dari root (akar) persamaan kuadrat adalah titik potong parabola dengan sumbu x. Untuk menyelesaikan persamaan kuadrat secara analitik, pertama-tama kita bagi dengan A: + + = Kemudian kami "menyelesaikan kotak" ke group terms: ( + ) − + = Memindahkan bagian konstan ke ruas kanan dan mengambil akar kuadrat memberikan + = ∓√ − Mengurangi B/(2A) dari kedua sisi dan mengelompokkan suku dengan penyebut 2A menghasilkan bentuk yang sudah dikenal:1 = − ± √ − Di sini simbol “±” berarti ada dua solusi, satu dengan tanda plus dan satu lagi dengan tanda minus. Jadi 3±1 sama dengan “dua atau empat”. Perhatikan bahwa suku yang menentukan banyaknya solusi nyata adalah D ≡ B2 – 4AC Yang disebut diskriminan persamaan kuadrat. Jika D > 0, ada dua solusi real (disebut juga akar). Jika D = 0, ada satu solusi nyata (akar “ganda”). Jika D < 0, tidak ada solusi nyata. Misalnya, akar dari 2x2 +6x+4=0 adalah x = −1 dan x = 2, dan persamaan x2+x+1 tidak memiliki solusi nyata. Diskriminan dari persamaan ini masing-masing adalah D =4 dan D = 3, jadi kita harapkan banyaknya solusi yang diberikan. Dalam program, biasanya merupakan ide yang baik 1 Implementasi yang kuat akan menggunakan ekspresi setara 2C/(−B ∓ √B 2 - 4AC) untuk menghitung salah satu akar, tergantung pada tanda B (Latihan 7).


14 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) untuk mengevaluasi D terlebih dahulu dan mengembalikan "tidak ada akar" tanpa mengambil akar kuadrat jika D negatif. 2.3 TRIGONOMETRI Dalam grafis kami menggunakan konteks dasar trigonometri inman. Biasanya, tidak ada yang terlalu mewah, dan sering kali membantu mengingat definisi dasar. Sudut (Angel) Meskipun kita menganggap sudut sebagai sesuatu yang biasa, kita harus kembali ke definisinya sehingga kita dapat memperluas gagasan tentang sudut ke dalam bola. Sebuah sudut terbentuk antara dua setengah garis (sinar tak hingga yang berasal dari titik asal) atau arah, dan beberapa konvensi harus digunakan untuk memutuskan antara dua kemungkinan sudut yang dibuat di antara mereka seperti yang ditunjukkan pada Gambar 2.6. Sudut didefinisikan oleh panjang segmen busur yang dipotongnya pada lingkaran satuan. Sebuah konvensi umum adalah bahwa panjang busur yang lebih kecil digunakan, dan tanda sudut ditentukan oleh urutan di mana dua setengah garis ditentukan. Menggunakan konvensi itu, semua sudut berada dalam kisaran [−π,π]. Gambar 2.6 Dua setengah garis memotong lingkaran satuan menjadi dua busur. Panjang salah satu busur adalah sudut sah "antara" dua setengah garis. Kita dapat menggunakan konvensi bahwa panjang yang lebih kecil adalah sudutnya, atau bahwa dua setengah garis ditentukan dalam urutan tertentu dan busur yang menentukan sudut adalah busur yang ditarik berlawanan arah jarum jam dari setengah garis pertama ke kedua. Masing-masing sudut ini adalah panjang busur lingkaran satuan yang "dipotong" oleh dua arah. Karena keliling lingkaran satuan adalah 2π, maka dua sudut yang mungkin berjumlah 2π. Satuan panjang busur ini adalah radian. Satuan umum lainnya adalah derajat, di mana keliling lingkaran adalah 360 derajat. Jadi, sudut radian π adalah 180°, biasanya dilambangkan 180◦. Konversi antara derajat dan radian adalah = = Fungsi Trigonometri Diberikan segitiga siku-siku dengan panjang sisi a, o, dan h, di mana adalah panjang sisi terpanjang (yang selalu berlawanan dengan sudut siku-siku), atau sisi miring, hubungan penting dijelaskan oleh Teorema Pythagoras: a 2 + o2 =h2 Anda dapat melihat bahwa ini benar dari Gambar 2.7, di mana kotak besar memiliki luas (a+o)2 , keempat segitiga memiliki luas gabungan 2ao, dan kotak tengah memiliki luas h2


15 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.7 Demonstrasi geometri dari teorema Pythagoras. Karena segitiga dan bujur sangkar bagian dalam membagi persegi yang lebih besar secara merata, kita memiliki 2ao + h2 =( a + o)2 , yang mudah dimanipulasi ke bentuk di atas. Kami mendefinisikan sinus dan cosinus dari ∅, serta ekspresi trigonometri berbasis rasio lainnya: sinϕ≡ o/h; cscϕ≡ h/o; cosϕ≡ a/h; secϕ≡ h/a; tanϕ≡ o/a; cotϕ≡ a/o. Definisi ini memungkinkan kita untuk mengatur koordinat kutub, di mana sebuah titik dikodekan sebagai jarak dari titik asal dan sudut bertanda relatif terhadap sumbu x positif (Gambar 2.8). Perhatikan konvensi bahwa sudut berada dalam rentang ∅∈ (−π,π], dan bahwa sudut positif berlawanan arah jarum jam dari sumbu x positif. Konvensi ini yang berlawanan arah jarum jam memetakan ke bilangan positif arbitrer, tetapi digunakan dalam banyak konteks dalam grafissehingga perlu dilakukan Penyimpanan Gambar 2.8 Koordinat kutub untuk titik (xa, ya)= (1,√3) adalah (ra, ∅a) = (2,π/3). Fungsi trigonometri bersifat periodik dan dapat mengambil sudut apa pun sebagai argumen. Misalnya, sin(A) = sin(A +2π). Ini berarti fungsi-fungsi tersebut tidak dapat dibalik jika dipertimbangkan dengan domain R. Masalah ini dihindari dengan membatasi jangkauan fungsi invers standar, dan ini dilakukan dengan cara standar di hampir semua perpustakaan matematika modern (misalnya, (Plauger, 1991)). Domain dan rentang adalah: asin : [−1,1] ⟼ [−π/2,π/2]; acos : [−1,1] ⟼ [0,π]; atan : ℝ ⟼ [−π/2,π/2]; atan2 : ℝ ⟼ [−π,π]. Fungsi terakhir, atan2(s,c) seringkali sangat berguna. Dibutuhkan nilai s yang proporsional dengan sin A dan nilai c yang menskalakan cosA dengan faktor yang sama dan


16 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) mengembalikan A. Faktor tersebut diasumsikan positif. Salah satu cara untuk memikirkan hal ini adalah bahwa ia mengembalikan sudut titik Cartesian 2D (s,c) dalam koordinat kutub (Gambar 2.9). Gambar 2.9 Fungsi atan2(s,c) mengembalikan sudut A dan seringkali sangat berguna dalam grafis. Identitas yang Berguna Bagian ini mencantumkan tanpa turunan berbagai identitas trigonometri yang berguna. Identitas Shifting: sin(−A)=−sin A cos(−A) = cos A tan(−A)=−tan A sin(π/2−A) = cos A cos(π/2−A) = sin A tan(π/2−A) = cot A Identitas Pitagoras : sin2 A + cos 2 A =1 sec2 A−tan2 A =1 csc2 A−cot2 A =1 Identitas substraksi dan tambahan : ( + ) = + sin(A-B) = sin A cos B – sin B cos A sin(2A) = 2 sin A cos A cos(A+B) = cos A cos B – sin A sin B cos(A-B) = cos A cos B + sin A sin B cos(2A) = cos2 A – sin2 A ( + ) = + − ( − ) = − + () = − Identitas Hlf-Angle (setengah sudut): sin2 (A/2)=(1-cosA)/2 cos2 (A/2)=(1-cosA)/2 Identitas Produk : sin A sin B = -(cos(A+B) – cos(A-B))/2 sin A cos B = (sin(A+B) + sin(A-B))/2 cos A cos B = (cos(A+B) + cos(A-B))/2


17 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Identitas berikut adalah untuk segitiga sembarang dengan panjang sisi a, b, dan c, masing-masing dengan sudut di hadapannya diberikan oleh A, B, C, masing-masing (Gambar 2.10): = = ( ) = + − ( ) + − = ( + ) ( − ) ( ) Luas segitiga juga dapat dihitung berdasarkan panjang sisi berikut: = 1 4 √( + + )(− + + )( − + )( + − ) Gambar 2.10 Geometri untuk hukum segitiga. 2.4 VEKTOR Sebuah vektor menggambarkan panjang dan arah. Hal ini dapat berguna diwakili oleh panah. Dua vektor sama jika mereka memiliki panjang dan arah yang sama bahkan jika kita menganggapnya berada di tempat yang berbeda (Gambar 2.11). Sebisa mungkin, Anda harus menganggap vektor sebagai panah dan not sebagai koordinat atau angka. Pada titik tertentu kita harus merepresentasikan vektor sebagai angka dalam program kita, tetapi bahkan dalam kode mereka harus dimanipulasi sebagai objek dan hanya operasi vektor tingkat rendah yang harus tahu tentang representasi numeriknya. Vektor akan direpresentasikan sebagai karakter tebal, mis., a. Panjang suatu vektor dilambangkan ||a||.Vektor satuan adalahvektor yang panjangnya adalah satu. Vektor nol adalah vektor dengan panjang nol. Arah vektor nol tidak terdefinisi. Vektor dapat digunakan untuk mewakili banyak hal yang berbeda. Misalnya, mereka dapat digunakan untuk menyimpan offset, juga disebut displacement. Jika kita tahu "harta terkubur dua langkah ke timur dan tiga langkah ke utara dari tempat pertemuan rahasia," maka kita tahu offsetnya, tapi kita tidak tahu harus mulai dari mana. Vektor juga dapat digunakan untuk menyimpan lokasi, kata lain untuk posisi atau titik. Lokasi dapat direpresentasikan sebagai perpindahan dari lokasi lain. Biasanya ada beberapa lokasi asal yang dipahami dari mana semua lokasi lain disimpan sebagai offset. Perhatikan bahwa lokasi bukan vektor. Seperti yang akan kita bahas, Anda dapat menambahkan dua vektor. Namun, biasanya tidak masuk akal untuk menambahkan dua lokasi kecuali itu adalah operasi perantara ketika menghitung rata-rata tertimbang dari suatu lokasi. Menambahkan dua offset memang masuk akal, jadi itulah salah satu alasan mengapa offset adalah vektor. Tapi ini menekankan bahwa lokasi bukanlah offset; itu adalah offset dari lokasi asal tertentu. Offset dengan sendirinya bukanlah lokasi.


18 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.11 Kedua vektor ini sama karena memiliki panjang dan arah yang sama Operasi Vektor Vektor memiliki sebagian besar operasi aritmatika biasa yang kita kaitkan dengan bilangan real. Dua vektor sama jika dan hanya jika mereka memiliki panjang dan arah yang sama. Dua vektor ditambahkan sesuai dengan aturan jajaran genjang. Aturan ini menyatakan bahwa jumlah dua vektor diperoleh dengan menempatkan salah satu ekor vektor terhadap kepala yang lain (Gambar 2.12). Jumlah vektor adalah vektor yang "menyelesaikan segitiga" dimulai oleh dua vektor. Jajar genjang dibentuk dengan mengambil jumlah di kedua urutan. Hal ini menekankan bahwa penjumlahan vektor bersifat komutatif: a + b = b + a Perhatikan bahwa aturan jajaran genjang hanya memformalkan intuisi kita tentang perpindahan. Pikirkan berjalan di sepanjang satu vektor, ekor ke kepala, dan kemudian berjalan di sepanjang yang lain. Gambar 2.12 Dua vektor ditambahkan dengan mengaturnya dari kepala ke ekor. Ini dapat dilakukan dalam urutan apa pun. Net Displacement hanyalah diagonal jajar genjang. Anda juga dapat membuat minus unary untuk sebuah vektor: a (Gambar 2.13) adalah vektor dengan panjang yang sama dengan a tetapi arahnya berlawanan. Hal ini memungkinkan kita untuk juga mendefinisikan pengurangan: b – a ≡ - a + b Anda dapat memvisualisasikan pengurangan vektor dengan jajaran genjang (Gambar 2.14). Kita bisa menulis a + (b – a) = b Vektor juga bisa dikalikan. Sebenarnya, ada beberapa jenis produk yang melibatkan vektor. Pertama, kita dapat menskalakan vektor dengan mengalikannya dengan bilangan real k. Ini hanya mengalikan panjang vektor tanpa mengubah arahnya. Misalnya, 3,5a adalah vektor yang arahnya sama dengan a tetapi panjangnya 3,5 kali a. Kami membahas dua produk yang melibatkan dua vektor, produk titik dan perkalian silang, nanti di bagian ini, dan produk yang melibatkan tiga vektor, determinan, di Bab 5.


19 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.13 Vektor –a memiliki panjang yang sama tetapi berlawanan arah dgn vektor a. Gambar 2.14 Pengurangan vektor hanyalah penjumlahan vektor dengan pembalikan argumen kedua. Gambar 2.15 Setiap vektor 2D c adalah jumlah berbobot dari dua vektor 2D tak sejajar a & b. Gambar 2.16 Dasar Cartesian 2D untuk vektor. Koordinat Cartesian dari Vektor Sebuah vektor 2D dapat ditulis sebagai kombinasi dari dua vektor bukan nol yang tidak sejajar. Sifat kedua vektor ini disebut independensi linier. Dua vektor bebas linier membentuk basis 2D, dan vektor-vektor tersebut disebut sebagai vektor basis. Sebagai contoh, sebuah vektor c dapat dinyatakan sebagai kombinasi dari dua vektor basis a dan b (Gambar 2.15): C = aca + bcb


20 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Perhatikan bahwa bobot ac dan bc adalah unik. Basa sangat berguna jika kedua vektor ortogonal, yaitu, mereka tegak lurus satu sama lain. Bahkan lebih berguna jika mereka juga vektor satuan dalam hal ini mereka ortonormal. Jika kita menganggap dua vektor "khusus" x dan y diketahui oleh kita, maka kita dapat menggunakannya untuk mewakili semua vektor lain dalam sistem koordinat Kartesius, di mana setiap vektor direpresentasikan sebagai dua bilangan real. Sebagai contoh, sebuah vektor a dapat direpresentasikan sebagai a = xax + yay dimana xa dan ya adalah koordinat Cartesian nyata dari vektor 2D a (Gambar 2.16). Perhatikan bahwa ini secara konseptual tidak berbeda dengan Persamaan (2.3), di mana vektor basisnya tidak ortonormal. Tetapi ada beberapa keuntungan dari sistem koordinat Cartesian. Misalnya, dengan teorema Pythagoras, panjang a adalah |||| = √ + Menghitung perkalian titik, perkalian silang, dan koordinat vektor dalam sistem Cartesian juga mudah, seperti yang akan kita lihat di bagian berikut. Dengan konvensi kita menulis koordinat baik sebagai pasangan terurut (xa,ya) atau matriks kolom: = [ ] Bentuk yang kita gunakan akan tergantung pada kenyamanan tipografi. Kami juga kadang-kadang akan menulis vektor sebagai matriks baris, yang akan kami tunjukkan sebagai a T : a T = [xa ya] Kami juga dapat mewakili 3D, 4D, dll, vektor dalam koordinat Cartesian. Untuk kasus 3D, kami menggunakan vektor basis z yang ortogonal untuk x dan y Produk Dot Cara paling sederhana untuk mengalikan dua vektor adalah produk titik. Hasil kali titik dari a dan b dilambangkan dengan a·b dan sering disebut hasil kali skalar karena menghasilkan skalar. Produk titik mengembalikan nilai yang terkait dengan panjang argumennya dan sudut di antara keduanya (Gambar 2.17): a . b = ||a|| ||b|| cos ∅ Penggunaan produk titik yang paling umum dalam program grafis adalah untuk menghitung kosinus sudut antara dua vektor. Produk titik juga dapat digunakan untuk menemukan proyeksi satu vektor ke vektor lainnya. Ini adalah panjang a→b dari vektor yang diproyeksikan tegak lurus pada vektor b (Gambar 2.18): a → b = ||a|| cos ∅ = a . b / ||b|| Produk titik mematuhi sifat asosiatif dan distributif yang kita miliki dalam aritmatika nyata: a·b = b·a, a·(b + c)=a·b + a·c, (ka)·b = a·(kb)=ka·b. Jika vektor 2D a dan b dinyatakan dalam koordinat Cartesian, kita dapat memanfaatkan x · x = y · y =1 dan x · y = 0 untuk memperoleh hasil kali titiknya adalah a·b = (xax + yay)·(xbx + yby) = xaxb(x·x)+xayb(x·y)+xbya(y·x)+yayb(y·y) = xaxb + yayb. Demikian pula dalam 3D kita dapat menemukan a·b = xaxb + yayb + zazb.


21 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.17 Produk titik terkait dengan panjang dan sudut dan merupakan salah satu rumus terpenting dalam grafis. Gambar 2.18 Proyeksi a ke b adalah panjang yang ditemukan oleh Persamaan (2.5). Perkalian Silang Perkalian silang a×b biasanya hanya digunakan untuk vektor tiga dimensi; perkalian silang umumdibahas dalam referensi yang diberikan dalam catatan bab. Perkalian silang mengembalikan vektor 3D yang tegak lurus terhadap dua argumen dari perkalian silang. Panjang vektor yang dihasilkan berhubungan dengan sin ∅: ||a x b|| = ||a|| ||b|| sin ∅ Besarnya ||a×b|| sama dengan luas jajar genjang yang dibentuk oleh vektor a dan b. Selain itu, a×b tegak lurus terhadap a dan b (Gambar 2.19). Perhatikan bahwa hanya ada dua kemungkinan arah untuk vektor semacam itu. Secara definisi, vektor-vektor pada arah sumbu x-, y- dan z diberikan oleh x = (1 ,0,0), y = (0 ,1,0), z = (0 ,0,1), dan kami menetapkan sebagai konvensi bahwa x×y harus dalam arah plus atau minus z. Pilihannya agak sewenang-wenang, tetapi standar untuk mengasumsikan bahwa z = x × y Semua permutasi yang mungkin dari ketiga vektor satuan kartesius adalah x×y =+ z, y×x = −z, y×z =+ x, z×y = −x, z×x =+ y, x×z = −y.


22 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.19 Perkalian silang a × b adalah vektor 3D yang tegak lurus terhadap kedua vektor 3D a dan b, dan panjangnya sama dengan luas jajaran genjang yang ditunjukkan. Karena sifat sin∅, kita juga mengetahui bahwa vektor silang itu sendiri adalah vektor nol, jadi x × x = 0 dan seterusnya. Perhatikan bahwa perkalian silang tidak komutatif, yaitu x×y ≠ y×x. Pengamat yang cermat akan mencatat bahwa diskusi di atas tidak memungkinkan kita untuk menggambar gambaran yang jelas tentang bagaimana sumbu Cartesian berhubungan. Lebih khusus lagi, jika kita meletakkan x dan y di trotoar, dengan x menunjuk ke timur dan y menunjuk ke utara, maka apakah z menunjuk ke langit atau ke tanah? Konvensi yang biasa adalah memiliki titik z ke langit. Ini dikenal sebagai sistem koordinat tangan kanan. Nama ini berasal dari skema memori "meraih" x dengan telapak tangan dan jari kanan Anda dan memutarnya ke arah y. Vektor z harus sejajar dengan ibu jari Anda. Hal ini diilustrasikan pada Gambar 2.20. Gambar 2.20 "Aturan tangan kanan" untuk perkalian silang. Bayangkan menempatkan pangkal telapak tangan kanan Anda di mana a dan b bergabung di ekornya, dan mendorong panah a ke arah b. Jempol kanan Anda yang diperpanjang harus mengarah ke a×b. Perkalian silang memiliki properti bagus yang a × (b + c) = a × b + a × c, dan a × (kb) = k(a × b). Namun, konsekuensi dari aturan tangan kanan adalah a × b = −(b × a). Dalam koordinat Cartesian, kita dapat menggunakan ekspansi eksplisit untuk menghitung perkalian silang: a×b = ( xax + yay + zaz)×(xbx + yby + zbz) = xaxbx×x + xaybx×y + xazbx×z + yaxby×x + yayby×y + yazby×z + zaxbz×x + zaybz×y + zazbz×z = ( yazb −zayb)x +(zaxb −xazb)y +(xayb −yaxb)z.


23 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Jadi, dalam bentuk koordinat, a × b = (yazb − zayb, zaxb − xazb, xayb − yaxb). Dasar Ortonormal dan Bingkai Koordinat Mengelola sistem koordinat adalah salah satu tugas inti dari hampir semua program grafis; kuncinya adalah mengelola basis ortonormal. Setiap himpunan dari dua vektor 2D u dan v membentuk basis ortonormal asalkan keduanya ortogonal (bersudut siku-siku) dan masing-masing memiliki panjang satuan. Jadi, ||u|| = ||v|| = 1 dan u · v = 0. Dalam 3D, tiga vektor u, v, dan w membentuk basis ortonormal jika ||u|| = ||v|| = ||w|| = 1 dan u · v = v · w = w · u = 0 Dasar ortonormal ini adalah tangan kanan asalkan w = u × v, dan selain itu kidal. Perhatikan bahwa basis ortonormal kanonik Cartesian hanyalah salah satu dari tak terhingga banyak basis ortonormal yang mungkin. Apa yang membuatnya istimewa adalah bahwa ia dan lokasi asal implisitnya digunakan untuk representasi tingkat rendah dalam suatu program. Jadi, vektor x, y, dan z tidak pernah disimpan secara eksplisit dan juga bukan lokasi asal kanonik o. Model global biasanya disimpan dalam sistem koordinat kanonik ini, dan karena itu sering disebut sistem koordinat global. Namun, jika kita ingin menggunakan sistem koordinat lain dengan asal p dan vektor basis ortonormal u, v, dan w, maka kita menyimpan vektor-vektor tersebut secara eksplisit. Sistem seperti ini disebut kerangka acuan atau kerangka koordinat. Misalnya, dalam simulator penerbangan, kita mungkin ingin mempertahankan sistem koordinat dengan titik asal di hidung pesawat, dan basis ortonormal sejajar dengan pesawat. Secara bersamaan, kita akan memiliki sistem koordinat kanonik utama (Gambar 2.21). Sistem koordinat yang terkait dengan objek tertentu, seperti bidang, biasanya disebut sistem koordinat lokal. Gambar 2.21 Selalu ada sistem koordinat master atau "kanonik" dengan asal dan basis ortonormal x, y, dan z. Sistem koordinat ini biasanya didefinisikan untuk disejajarkan dengan model global dan dengan demikian sering disebut sistem koordinat "global" atau "dunia". Vektor asal dan basis ini tidak pernah disimpan secara eksplisit. Semua vektor dan lokasi lainnya disimpan dengan koordinat yang menghubungkannya dengan kerangka global. Sistem koordinat yang terkait dengan bidang secara eksplisit disimpan dalam bentuk koordinat global.


24 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Pada level rendah, bingkai lokal disimpan dalam koordinat kanonik. Misalnya, jika u memiliki koordinat (xu, yu, zu), u = xux + yuy + zuz. Lokasi secara implisit menyertakan offset dari asal kanonik: p = o + xpx + ypy + zpz, di mana (xp,yp,zp) adalah koordinat p. Perhatikan bahwa jika kita menyimpan sebuah vektor a terhadap kerangka u-v-w, kita menyimpan sebuah rangkap tiga (ua,va,wa) yang dapat kita tafsirkan secara geometris sebagai a = uau + vav + waw. Untuk mendapatkan koordinat kanonik dari vektor a yang disimpan dalam sistem koordinat uvw, cukup ingat bahwa u, v, dan w sendiri disimpan dalam koordinat Cartesian, sehingga ekspresi uau + vav + waw sudah dalam koordinat Cartesian jika dievaluasi secara eksplisit . Untuk mendapatkan koordinat u-v-w dari vektorb yang disimpan dalam sistem koordinat kanonik, kita dapat menggunakan produk titik: ub = u·b; vb = v·b; wb = w·b. Ini berfungsi karena kita tahu bahwa untuk beberapa ub, vb, dan wb, ubu + vbv + wbw = b, dan produk titik mengisolasi koordinat ub: u · b = ub(u · u) + vb(u · v) + wb(u · w) = ub. Ini bekerja karena u, v, andw ortonormal. Menggunakan matriks untuk mengelola perubahan sistem koordinat dibahas dalam Bagian 6.2.1 dan 6.5. Membangun Basis dari Vektor Tunggal Seringkali kita membutuhkan basis ortonormal yang disejajarkan dengan vektor yang diberikan. Artinya, diberikan vektor a, kami menginginkan ortonormal u, v, dan w sedemikian rupa sehingga w menunjuk ke arah yang sama dengan a (Hughes& Moller, 1999), tetapi kami tidak terlalu peduli apa u dan v itu. Satu vektor tidak cukup untuk menentukan jawaban secara unik; kita hanya perlu prosedur kuat yang akan menemukan salah satu basis yang mungkin. Ini dapat dilakukan dengan menggunakan perkalian silang sebagai berikut. Pertama-tama buatlah w sebagai vektor satuan dengan arah a: = |||| Kemudian pilih salah satu vektor t yang tidak kolinear dengan w, dan gunakan perkalian silang untuk membuat vektor satuan u tegak lurus terhadap w: = || || Catatan : Prosedur yang sama ini tentu saja dapat digunakan untuk membangun tiga vektor dalam urutan apa pun; hanya memperhatikan urutan perkalian silang untuk memastikan dasar tangan kanan. Jika t kolinear dengan w penyebut akan hilang, dan jika hampir kolinear hasilnya akan memiliki presisi rendah. Prosedur sederhana untuk menemukan vektor yang cukup berbeda dari w adalah memulai dengan t sama dengan w dan mengubah komponen besaran terkecil dari t menjadi 1. Misalnya, jika = ( 1 √2 , − 1 √2 , 0) maka = ( 1 √2 , − 1 √2 , 1).Setelah Anda dan Anda berada di tangan, menyelesaikan dasarnya sederhana: v = w × u


25 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Contoh situasi di mana konstruksi ini digunakan adalah naungan permukaan, di mana diperlukan dasar yang sejajar dengan permukaan normal tetapi rotasi di sekitar normal sering tidak penting. Membangun Basis dari Dua Vektor Prosedur di bagian sebelumnya juga dapat digunakan dalam situasi di mana rotasi basis di sekitar vektor yang diberikan adalah penting. Contoh umum adalah membangun basis untuk kamera: penting untuk memiliki satu vektor yang disejajarkan dengan arah yang dilihat kamera, tetapi orientasi kamera di sekitar vektor itu tidak sembarang, dan entah bagaimana harus ditentukan. Setelah orientasi ditentukan, dasarnya ditentukan sepenuhnya. Cara umum untuk menspesifikasikan frame secara penuh adalah dengan menyediakan dua vektor a (yang menspesifikasikan w) dan b (yang menspesifikasikan v). Jika kedua vektor diketahui tegak lurus, maka vektor ketiga dapat dibuat dengan mudah dengan u = b×a. Catatan : u = a×b juga menghasilkan basis ortonormal, tetapi merupakan tangan kiri. Untuk memastikan bahwa basis yang dihasilkan benar-benar ortonormal, bahkan jika vektor inputnya tidak cukup, disarankan untuk menggunakan prosedur seperti prosedur vektor tunggal: = |||| = || || = Sebenarnya, prosedur ini bekerja dengan baik ketika a dan b tidak tegak lurus. Dalam hal ini, w akan dibangun tepat pada arah a, dan v dipilih sebagai vektor terdekat ke b di antara semua vektor yang tegak lurus terhadap w. Catatan : Jika Anda ingin metoset tongkat v ke dua arah yang tidak tegak lurus, sesuatu harus diberikan—dengan skema ini saya akan mengatur semuanya sesuai keinginan Anda, kecuali saya akan membuat perubahan terkecil ke v sehingga sebenarnya tegak lurus terhadap w. Apa yang akan salah dengan perhitungan jika a dan b paralel? Prosedur ini tidak akan bekerja jika a dan b adalah collinear. Dalam hal ini b tidak membantu dalam memilih arah mana yang tegak lurus terhadap a yang harus kita gunakan: arahnya tegak lurus terhadap semuanya. Dalam contoh penentuan posisi kamera, kami ingin membuat bingkai yang memiliki w sejajar dengan arah yang dilihat kamera, dan v harus menunjuk ke bagian atas kamera. Untuk mengarahkan kamera ke atas, kami membangun basis di sekitar arah tampilan, menggunakan arah lurus ke atas sebagai vektor referensi untuk menetapkan orientasi kamera di sekitar arah tampilan. Menyetel v sedekat mungkin ke lurus sama persis dengan gagasan intuitif "memegang kamera lurus". Mengkuadratkan Basis Kadang-kadang Anda mungkin menemukan masalah yang disebabkan dalam perhitungan Anda dengan basis yang dianggap ortonormal tetapi di mana kesalahan telah merayap—karena kesalahan pembulatan dalam perhitungan, atau karena basis telah disimpan dalam file dengan presisi rendah, misalnya. Prosedur bagian sebelumnya dapat digunakan; hanya membangun basis baru menggunakan vektor w dan v yang ada akan menghasilkan basis baru yang ortonormal dan dekat dengan yang lama. Pendekatan ini bagus untuk banyak aplikasi, tetapi ini bukan yang terbaik yang tersedia. Ini menghasilkan vektor ortogonal yang akurat, dan untuk basis awal yang hampir ortogonal, hasilnya tidak akan menyimpang jauh dari titik awal. Namun, itu asimetris: "mendukung" w


26 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) atas v dan v atas u (yang nilai awalnya dibuang). Ia memilih basis yang dekat dengan basis awal tetapi tidak memiliki jaminan untuk memilih basis ortonormal terdekat. Jika ini tidak cukup baik, SVD dapat digunakan untuk menghitung basis ortonormal yang dijamin paling dekat dengan basis aslinya. 2.5 KURVA DAN DATAR Geometri kurva, dan terutama permukaan, memainkan peran sentral dalam grafis, dan di sini kita meninjau dasar-dasar kurva dan permukaan dalam ruang 2D dan 3D. Kurva Implisit 2D Secara intuitif, kurva adalah sekumpulan titik yang dapat digambar pada selembar kertas tanpa mengangkat pena. Cara umum untuk menggambarkan kurva adalah menggunakan persamaan implisit. Persamaan implisit dalam dua dimensi memiliki bentuk f(x, y) = 0 Fungsi f(x, y) mengembalikan nilai riil. Titik (x, y) yang nilainya nol berada pada kurva, dan titik yang nilainya bukan nol tidak berada pada kurva. Misalkan f(x, y) adalah f(x, y) = ( x − xc) 2 + (y − yc) 2 − r 2 di mana (xc, yc) adalah titik 2D dan r adalah bilangan bukan nol. Jika kita ambil f(x, y)= 0, titik-titik di mana persamaan ini berlaku adalah pada lingkaran dengan pusat(xc, yc) dan jarijari r. Alasan mengapa persamaan ini disebut persamaan “implisit” adalah karena titik (x, y) pada kurva tidak dapat langsung dihitung dari persamaan dan sebaliknya harus ditentukan dengan menyelesaikan persamaan. Dengan demikian, titik-titik pada kurva tidak dihasilkan oleh persamaan secara eksplisit, tetapi mereka terkubur di suatu tempat secara implisit dalam persamaan. Gambar 2.22 Fungsi implisit f(x,y) = 0 dapat dianggap sebagai bidang ketinggian di mana f adalah tinggi (atas). Jalur di mana tingginya nol adalah kurva implisit (bawah). Sangat menarik untuk dicatat bahwa f memang memiliki nilai untuk semua (x, y). Kita dapat menganggapnya sebagai medan, dengan permukaan laut pada f = 0 (Gambar2.22). Pantai adalah kurva implisit. Nilai f adalah ketinggian. Hal lain yang perlu diperhatikan adalah bahwa kurva mempartisi ruang menjadi daerah-daerah di mana f > 0, f < 0, dan f = 0. Jadi Anda mengevaluasi f untuk memutuskan apakah suatu titik "di dalam" kurva. Perhatikan bahwa f(x, y) = c adalah kurva untuk setiap konstanta c, dan c =0 hanya digunakan sebagai konvensi. Misalnya, jika f(x, y) = x 2 + y2 − 1, memvariasikan c hanya memberikan variasi lingkaran yang berpusat di titik asal (Gambar 2.23). Kita dapat memampatkan notasi kita menggunakan


27 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) vektor. Jika kita mempunyai c = (xc, yc) dan p = (x, y), maka lingkaran kita dengan pusat c dan jari-jari r didefinisikan oleh vektor-vektor posisi yang memenuhi (p − c) · (p − c) – r 2 = 0 . Persamaan ini, jika diperluas secara aljabar, akan menghasilkan Persamaan (2.9), tetapi lebih mudah untuk melihat bahwa ini adalah persamaan untuk lingkaran dengan "membaca" persamaan secara geometris. Bunyinya, "titik p pada lingkaran memiliki properti berikut: vektor dari c ke p ketika bertitik dengan dirinya sendiri memiliki nilai r2 ." Karena sebuah vektor bertitik dengan dirinya sendiri hanya kuadrat panjangnya sendiri, kita juga dapat membaca persamaan sebagai, "titik p pada lingkaran memiliki sifat berikut: vektor dari c ke p memiliki panjang kuadrat r2." Gambar 2.23 Fungsi implisit f(x,y) = 0 dapat dianggap sebagai bidang ketinggian di mana f adalah tinggi (atas). Jalur di mana tingginya nol adalah kurva implisit (bawah). Bahkan lebih baik, adalah untuk mengamati bahwa panjang kuadrat hanyalah jarak kuadrat dari c ke p, yang menunjukkan bentuk yang setara ||p – c||2 – r 2 = 0 dan, tentu saja, ini menyarankan ||p – c|| – r = 0 Di atas dapat dibaca "titik p pada lingkaran adalah yang berjarak r dari titik pusat c", yang merupakan definisi lingkaran yang baik. Ini mengilustrasikan bahwa bentuk vektor dari suatu persamaan sering kali menunjukkan lebih banyak geometri dan intuisi daripada bentuk Cartesian yang setara dengan x dan y. Untuk alasan ini, biasanya disarankan untuk menggunakan bentuk vektor jika memungkinkan. Selain itu, Anda dapat mendukung kelas vektor dalam kode Anda; kode lebih bersih ketika bentuk vektor digunakan. Persamaan berorientasi vektor juga kurang rawan kesalahan dalam implementasi: setelah Anda mengimplementasikan dan men-debug jenis vektor dalam kode Anda, kesalahan potong dan tempel yang melibatkan x, y, dan z akan hilang. Dibutuhkan sedikit waktu untuk membiasakan diri dengan vektor dalam persamaan ini, tetapi setelah Anda menguasainya, hasilnya besar. Gradien2D Jika kita menganggap fungsi f(x, y) sebagai bidang ketinggian dengan tinggi = f(x, y), vektor gradien menunjuk ke arah kemiringan maksimum, yaitu lurus menanjak. Vektor gradien ∇f(x, y) diberikan oleh (, ) = ( , ) Vektor gradien yang dievaluasi pada suatu titik pada kurva implisit f(x, y)=0 tegak lurus terhadap vektor tangen kurva pada titik tersebut. Vektor tegak lurus ini biasanya disebut


28 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) vektor normal terhadap kurva. Selain itu, karena gradiennya menanjak, ini menunjukkan arah wilayah f(x, y) > 0. Dalam konteks medan ketinggian, makna geometris turunan parsial dan gradien lebih terlihat dari biasanya. Misalkan di dekat titik (a, b), f(x, y) adalah sebuah bidang (Gambar 2.24). Ada arah menanjak dan menurun yang spesifik. Di sudut kanan ke arah ini adalah arah yang datar terhadap pesawat. Setiap perpotongan antara bidang dan bidang f(x, y) = 0 akan berada pada arah yang datar. Dengan demikian arah menanjak/menurun akan tegak lurus dengan garis perpotongan f(x,y)=0. Untuk melihat mengapa turunan parsial ada hubungannya dengan ini, kita perlu memvisualisasikan makna geometrisnya. Ingat bahwa turunan konvensional dari fungsi 1D y = g(x) adalah ≡ ∆ → ∆ ∆ = ∆ → ( + ∆) − () ∆ Ini mengukur kemiringan garis singgung ke g (Gambar2.25). Turunan parsial adalah generalisasi dari turunan 1D. Untuk fungsi 2D f(x,y), kita tidak dapat mengambil limit yang sama untuk x seperti pada Persamaan (2.10), karena f dapat berubah dalam banyak cara untuk perubahan x yang diberikan. Namun, jika kita menganggap y konstan, kita dapat mendefinisikan analog dari turunan, yang disebut turunan parsial (Gambar 2.26): ∆ → ( + ∆, ) − (, ) ∆ Mengapa turunan parsial terhadap x dan y merupakan komponen vektor gradien? Sekali lagi, ada wawasan yang lebih jelas dalam geometri daripada di aljabar. Pada Gambar 2.27, kita melihat vektor a bergerak sepanjang jalur di mana f tidak berubah. Perhatikan bahwa ini sekali lagi pada skala yang cukup kecil sehingga tinggi permukaan (x, y) = f(x, y) dapat dianggap planar lokal. Dari gambar tersebut, kita melihat bahwa vektor a = (Δx, Δy). Karena arah menanjak tegak lurus terhadap a, kita tahu perkalian titik sama dengan nol: (∇f) · a ≡ (x∇, y∇) · (xa, ya) = x∇Δx + y∇Δy = 0 . Kita juga tahu bahwa perubahan dalam arah f (xa,ya) sama dengan nol: ∆ = ∆ + ∆ ≡ + = Gambar 2.24 Tinggi permukaan = f(x, y) secara lokal planar dekat (x ,y) = (a, b). Gradien adalah proyeksi arah menanjak ke bidang ketinggian = 0.


29 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.25 Turunan dari fungsi 1D mengukur kemiringan garis yang bersinggungan dengan kurva. Gambar 2.26 Turunan parsial dari suatu fungsi f terhadap x harus memiliki konstanta y untuk memiliki nilai unik, seperti yang ditunjukkan oleh titik gelap. Titik-titik berongga menunjukkan nilai-nilai lain dari f yang tidak membuat y konstan. Mengingat vektor (x, y) dan (x, y ) yang tegak lurus, kita tahu bahwa sudut di antara mereka adalah 90 derajat, dan dengan demikian produk titik mereka sama dengan nol (ingat bahwa produk titik sebanding dengan kosinus dari sudut antara dua vektor). Jadi, kita memiliki xx’ + yy’ = 0. Diberikan (x, y), mudah untuk membangun vektor-vektor valid yang perkalian titiknya dengan (x, y) sama dengan nol, dua yang paling jelas adalah (y, −x) dan (−y, x); Anda dapat memverifikasi bahwa vektor-vektor ini memberikan hasil kali titik nol yang diinginkan dengan (x, y). Generalisasi dari pengamatan ini adalah bahwa (x, y) tegak lurus terhadap k(y, −x) di mana k adalah sembarang konstanta bukan nol. Ini menyiratkan bahwa (, ) = ( , − ) Menggabungkan Persamaan (2. 11) dan (2.12) memberikan (, ) = ′ ( , ) di mana k’ adalah sembarang konstanta bukan nol. Menurut definisi, "menanjak" menyiratkan perubahan positif pada f, jadi kita ingin k’ > 0, dan k’ =1 adalah konvensi yang sangat baik. Sebagai contoh gradien, perhatikan lingkaran implisit x2 + y2 – 1= 0 dengan vektor gradien (2x, 2y), yang menunjukkan bahwa bagian luar lingkaran adalah daerah positif untuk fungsi f(x, y) = x 2 + y2 – 1. Perhatikan bahwa panjang vektor gradien dapat berbeda tergantung pada pengali dalam persamaan implisit. Misalnya, lingkaran satuan dapat digambarkan dengan Ax2 + Ay2 – A = 0 untuk sembarang bukan nol A. Gradien untuk kurva ini adalah (2Ax, 2Ay). Ini akan normal (tegak lurus) terhadap lingkaran, tetapi akan memiliki panjang yang ditentukan oleh A. Untuk A > 0, normal akan mengarah ke luar dari lingkaran, dan untuk A <


30 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) 0, akan mengarah ke dalam. Peralihan dari luar ke dalam ini sebagaimana mestinya, karena daerah positif beralih di dalam lingkaran. Jarak pandang tinggi-bidang, h = Ax2 +Ay2−A, dan lingkaran berada pada ketinggian nol. Untuk A > 0, lingkaran menutupi depresi, dan untuk A < 0, lingkaran menutupi benjolan. Saat A menjadi lebih negatif, tonjolan bertambah tinggi, tetapi lingkaran h = 0 tidak berubah. Arah menanjak maksimum tidak berubah, tetapi kemiringan meningkat. Panjang gradien mencerminkan perubahan derajat kemiringan ini. Jadi secara intuitif, Anda dapat menganggap arah gradien sebagai menunjuk ke atas dan besarnya sebagai mengukur seberapa menanjak lereng itu. Gambar 2.27 Vektor a menunjuk ke arah di mana f tidak berubah dan dengan demikian tegak lurus terhadap vektor gradien ∇f. Garis Implisit 2D Bentuk garis “slope-intercept” yang familiar adalah y ≡ mx + b Ini dapat dengan mudah dikonversi ke bentuk implisit (Gambar 2.28): y – mx – b = 0 Di sini m adalah "kemiringan" (rasio naik ke run) dan b adalah nilai y di mana garis memotong sumbu y, biasanya disebut perpotongan y. Garis juga mempartisi bidang 2D, tetapi di sini "di dalam" dan "di luar" mungkin lebih intuitif disebut "atas" dan "bawah". Gambar 2.28 Garis 2D dapat digambarkan dengan persamaan y – mx − b = 0.


31 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Karena kita dapat mengalikan persamaan implisit dengan konstanta apa pun tanpa mengubah titik di mana ia adalah nol, kf(x, y) = 0 adalah kurva yang sama untuk sembarang k yang tidak nol. Ini memungkinkan beberapa bentuk implisit untuk baris yang sama, misalnya, 2y – 2mx – 2b = 0 Salah satu alasan bentuk perpotongan kemiringan terkadang canggung adalah karena ia tidak dapat mewakili beberapa garis seperti x = 0 karena m harus tak hingga. Untuk alasan ini, bentuk yang lebih umum sering kali berguna: Ax + By + C = 0 untuk bilangan real A, B, C. Misalkan kita mengetahui dua titik pada garis, (x0, y0) dan (x1, y1). Apakah A, B, dan C yang menggambarkan garis yang melalui dua titik ini? Karena titiktitik ini terletak pada garis, keduanya harus memenuhi Persamaan(2.15): Ax0 + By0 + C = 0 , Ax1 + By1 + C =0 Sayangnya kami memiliki dua persamaan dan tiga yang tidak diketahui: A, B, dan C. Masalah ini muncul karena pengali arbitrer yang dapat kita miliki dengan persamaan implisit. Kita dapat mengatur C = 1 untuk kenyamanan: Ax + By +1=0 , tetapi kita memiliki masalah yang serupa dengan kasus kemiringan tak hingga dalam bentuk perpotongan kemiringan: garis yang melalui titik asal harus memiliki A(0) + B(0) + 1 = 0, yang merupakan kontradiksi. Misalnya, persamaan garis 45 derajat yang melalui titik asal dapat ditulis x − y = 0, atau sama baiknya y − x = 0, atau genap 17y − 17x = 0, tetapi tidak dapat ditulis dalam bentuk Ax + By + 1=0 Gambar 2.29 Vektor gradien (A,B) tegak lurus terhadap garis implisit Ax + By + C = 0. Setiap kali kita memiliki masalah aljabar sial seperti itu, kita mencoba untuk memecahkan masalah menggunakan intuisi geometris sebagai panduan. Salah satu alat yang kita miliki. Untuk garis Ax + By+ C =0, vektor gradiennya adalah (A,B). Vektor ini tegak lurus terhadap garis (Gambar 2.29), dan menunjuk ke sisi garis di mana Ax + By + C positif. Diberikan dua titik pada garis (x0, y0) dan (x1, y1), kita tahu bahwa vektor di antara keduanya menunjukkan arah yang sama dengan garis. Vektor ini hanya (x1 − x0, y1 − y0), dan karena sejajar dengan garis, maka vektor tersebut juga harus tegak lurus terhadap vektor gradien (A, B). Ingatlah bahwa ada bilangan tak hingga (A, B, C) yang menggambarkan garis karena sifat scalling arbitrer dari implisit. Kami ingin salah satu dari yang valid (A, B, C). Kita bisa mulai dengan sembarang(A, B) yang tegak lurus (x1 - x0, y1 - y0). Vektor tersebut hanya (A, B) = ( y0 - y1, x1 - x0). Ini berarti persamaan garis yang melalui (x0, y0) dan (x1, y1) adalah (y0 − y1)x + (x1 − x0)y + C = 0 . Sekarang kita hanya perlu mencari C. Karena (x0, y0) dan (x1, y1) berada pada garis tersebut, keduanya harus memenuhi Persamaan (2.16). Kita dapat memasukkan salah satu


32 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) nilai dan menyelesaikan untuk C. Melakukan ini untuk (x0, y0) menghasilkan C = x0y1 – x1y0, dan dengan demikian persamaan lengkap untuk garis adalah (y0 − y1)x + (x1 − x0)y + x0y1 − x1y0 = 0 . Sekali lagi, ini adalah salah satu dari banyak persamaan implisit yang valid untuk garis yang melalui dua titik, tetapi bentuk ini tidak memiliki operasi pembagian dan dengan demikian tidak ada kasus degenerasi numerik untuk titik-titik dengan koordinat Cartesian yang terbatas. Hal yang menyenangkan tentang Persamaan (2.17) adalah bahwa kita selalu dapat mengonversi ke bentuk perpotongan kemiringan (bila ada) dengan memindahkan suku non-y ke ruas kanan persamaan dan membaginya dengan pengali suku y: = − − + − − Sifat menarik dari persamaan garis implisit adalah dapat digunakan untuk mencari jarak bertanda dari suatu titik ke garis. Nilai Ax + By + C sebanding dengan jarak dari garis (Gambar 2.30). Seperti ditunjukkan pada Gambar 2.31, jarak dari suatu titik ke garis adalah panjang vektor k(A, B), yaitu = √ + Untuk titik (x, y) + k(A, B), nilai pada f(x, y) = Ax + By + C adalah f(x + kA, y + kB)= Ax + kA2 + By + kB2 + C = k(A2 + B2 ). Penyederhanaan persamaan tersebut adalah hasil dari fakta bahwa kita tahu (x, y) berada pada garis, jadi Ax + By + C = 0. Dari Persamaan(2.18) dan(2.19), kita dapat melihat bahwa jarak bertanda dari garis Ax + By + C = 0 ke titik (a, b) adalah = (, ) √ + Di sini "jarak bertanda" berarti bahwa besar (nilai absolut) adalah jarak geometris, tetapi di satu sisi garis, jarak positif dan negatif. Anda dapat memilih antara representasi yang sama validnya f(x, y) = 0 dan f(x, y) = 0 jika masalah Anda memiliki alasan untuk memilih sisi tertentu yang positif. Perhatikan bahwa jika (A, B) adalah vektor satuan, maka f(a, b) adalah jarak bertanda. Kita dapat mengalikan Persamaan (2.17) dengan konstanta yang memastikan bahwa (A, B) adalah vektor satuan: (, ) = − √( − ) + ( − ) + − √( − ) + ( − ) + − √( − ) + ( − ) = Perhatikan bahwa mengevaluasi f(x, y) dalam Persamaan(2.20) secara langsung memberikan jarak bertanda, tetapi memerlukan akar kuadrat untuk menyiapkan persamaan. Garis implisit akan menjadi sangat berguna untuk asterisasi segitiga. Bentuk lain untuk garis 2D dibahas dalam Bab 14.


33 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.30 Nilai fungsi implisit f (x,y)= Ax+By+Cisakonstanta kali jarak bertanda dari Ax + By + C = 0. Gambar 2.31 Vektor k(A,B) menghubungkan sebuah titik (x,y) pada garis yang terdekat dengan sebuah titik yang tidak berada pada garis tersebut. Jarak sebanding dengan k. Kurva kuadrat implisit Pada bagian sebelumnya kita melihat bahwa fungsi linier f(x, y) menghasilkan garis implisit f(x, y) = 0. Iff adalah fungsi kuadrat dari x dan y, dengan bentuk umum Ax2 + Bxy + Cy2 + Dx+ Ey + F =0 kurva implisit yang dihasilkan disebut kuadrat. Kurva kuadrat dua dimensi termasuk elips dan hiperbola, serta kasus khusus parabola, lingkaran, dan garis. Contoh kurva kuadrat meliputi lingkaran dengan pusat (xc, yc) dan jari-jari r, (x − xc) 2 +(y − yc)2 − r2 = 0, dan elips sejajar sumbu dari bentuk ( − ) + ( − ) − = di mana (xc, yc) adalah pusat elips, dan a dan b adalah semi-sumbu minor dan mayor (Gambar 2.32) Gambar 2.32 Elips dengan pusat (xc,y c) dan setengah sumbu dengan panjang a dan b. Catatan : Coba atur a = b = r pada persamaan elips dan bandingkan dengan persamaan lingkaran.


34 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Permukaan Implisit 3D Sama seperti persamaan implisit yang dapat digunakan untuk mendefinisikan kurva dalam 2D, persamaan tersebut juga dapat digunakan untuk mendefinisikan permukaan dalam 3D. Asin2D, persamaan implisit secara implisit mendefinisikan sejumlah titik yang ada di permukaan: f(x, y, z) = 0. Setiap titik (x, y, z) yang ada di permukaan menghasilkan nol ketika diberikan sebagai argumen untuk f. Setiap titik yang tidak ada di permukaan menghasilkan beberapa angka selain nol. Anda dapat memeriksa apakah suatu titik berada di permukaan dengan mengevaluasi f, atau Anda dapat memeriksa sisi mana dari permukaan tersebut dengan melihat tanda f, tetapi Anda tidak dapat selalu secara eksplisit membangun titik di permukaan. Dengan menggunakan notasi vektor, kita akan menulis fungsi p = (x, y, z) sebagai f(p) = 0. Permukaan Normal ke Permukaan Implisit Normal permukaan (yang diperlukan untuk perhitungan pencahayaan, antara lain) adalah vektor yang tegak lurus terhadap permukaan. Setiap titik pada permukaan mungkin memiliki vektor normal yang berbeda. Dengan cara yang sama bahwa gradien memberikan normal ke kurva implisit dalam 2D, permukaan normal pada titik p pada permukaan implisit diberikan oleh gradien dari fungsi implisit = () = ( () , () , () ) Alasan yang sama untuk kasus 2D: gradien menunjuk ke arah peningkatan tercepat dalam f, yang tegak lurus terhadap semua arah yang bersinggungan dengan permukaan, di mana f tetap konstan. Vektor gradien menunjuk ke arah sisi permukaan di mana f(p) > 0, yang mungkin kita anggap sebagai "ke dalam" permukaan atau "keluar dari" permukaan dalam konteks tertentu. Jika bentuk tertentu dari f menciptakan gradien menghadap ke dalam, dan gradien menghadap ke luar diinginkan, permukaan−f(p)= 0 sama dengan permukaan f(p)=0tetapi memiliki gradien terbalik arah, yaitu, ∇f(p) = ∇(−f(p)). Pesawat Implisit Sebagai contoh, perhatikan planet tak hingga melalui titik-titik dengan permukaan normal n. Persamaan implisit untuk menggambarkan bidang ini diberikan oleh (p . a) . n = 0 Perhatikan bahwa a dan n adalah besaran yang diketahui. Titik p adalah sembarang titik yang tidak diketahui yang memenuhi persamaan. Dalam istilah geometris persamaan ini mengatakan "vektor dari a ke p tegak lurus terhadap bidang normal." Jika p tidak berada pada bidang, maka (p−a) tidak akan membentuk sudut siku-siku dengan n (Gambar2.33). Gambar 2.33 Setiap titik p yang ditunjukkan berada pada bidang dengan vektor normal n yang mencakup titik a jika Persamaan (2.2) terpenuhi.


35 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Terkadang kita menginginkan persamaan implisit untuk bidang yang melalui titik a, b, dan c. Normal untuk bidang ini dapat ditemukan dengan mengambil perkalian silang dari dua vektor di pesawat. Salah satu perkalian silang tersebut n = (b − a) × (c − a). Ini memungkinkan kita untuk menulis persamaan bidang implisit: (p − a) · ((b − a) × (c − a)) = 0. Cara geometris untuk membaca persamaan ini adalah bahwa volume paralelepiped didefinisikan oleh p – a, b – a, dan c a adalah nol, yaitu, mereka adalah coplanar. Ini hanya bisa benar jika p berada pada bidang yang sama dengan a, b, dan c. Representasi Cartesian lengkap untuk ini diberikan oleh determinan: | − − − − − − − − − | = Determinan dapat diperluas ke bentuk kembung dengan banyak istilah. Persamaan (2.22) dan (2.23) setara, dan membandingkannya adalah pelajaran. Persamaan (2.22) mudah diinterpretasikan secara geometris dan akan menghasilkan kode yang efisien. Selain itu, relatif mudah untuk menghindari kesalahan tipografi yang dikompilasi menjadi kode yang salah jika memanfaatkan kode perkalian silang dan titik yang di-debug. Persamaan (2.23) juga mudah diinterpretasikan secara geometris dan akan efisien asalkan fungsi determinan 3 × 3 yang efisien diimplementasikan. Ini juga mudah untuk diimplementasikan tanpa tersedianya faktor penentu fungsi tipografi (a,b,c). Akan sangat mudah bagi orang lain untuk membaca kode Anda jika Anda mengganti nama volume fungsi penentu. Jadi Persamaan (2.22) dan (2.23) memetakan dengan baik ke dalam kode. Ekspansi penuh dari salah satu persamaan menjadi komponen x-, y-, dan z kemungkinan akan menghasilkan kesalahan ketik. Kesalahan ketik seperti itu cenderung dikompilasi dan, dengan demikian, menjadi sangat sial. Ini adalah contoh yang sangat baik dari matematika bersih yang menghasilkan kode bersih dan matematika kembung yang menghasilkan kode kembung. Permukaan Kuadrat 3D Sama seperti polinomial kuadrat dalam dua variabel mendefinisikan kurva kuadrat dalam 2D, polinomial kuadrat dalam x, y, dan z mendefinisikan permukaan kuadrat dalam 3D. Misalnya, bola dapat ditulis sebagai f(p) = (p − c)2 − r2 = 0 , dan elipsoid sejajar sumbu dapat ditulis sebagai ( − ) + ( − ) + ( − ) − = Kurva 3D dari Permukaan Implisit Seseorang mungkin berharap bahwa kurva 3D implisit dapat dibuat dengan bentuk f(p) = 0. Namun, semua kurva tersebut hanyalah permukaan yang merosot dan jarang berguna dalam praktik. Kurva A3D dapat dibangun dari perpotongan dua persamaan implisit simultan: f(p) = 0 , g(p) = 0. Misalnya, garis 3D dapat dibentuk dari perpotongan dua bidang implisit. Biasanya, lebih nyaman menggunakan kurva parametrik sebagai gantinya; mereka dibahas di bagian berikut.


36 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Kurva Parametrik 2D Kurva parametrik dikendalikan oleh satu parameter yang dapat dianggap sebagai semacam indeks yang bergerak terus menerus sepanjang kurva. Kurva tersebut memiliki bentuk [ ] = [ () () ] Di sini (x, y) adalah titik pada kurva, dan t adalah parameter yang mempengaruhi kurva. Untuk t yang diberikan, akan ada beberapa titik yang ditentukan oleh fungsi g dan h. Untuk g dan h kontinu, perubahan kecil pada t akan menghasilkan perubahan kecil pada x dan y. Jadi, saat t terus berubah, titik-titik tersapu dalam kurva kontinu. Ini adalah fitur yang bagus karena kita dapat menggunakan parameter t untuk secara eksplisit membangun titik pada kurva. Seringkali kita dapat menulis kurva parametrik dalam bentuk vektor, p = f(t), di mana f adalah fungsi bernilai vektor, f : ℝ ↦ ℝ2 . Fungsi vektor tersebut dapat menghasilkan kode yang sangat bersih, sehingga harus digunakan bila memungkinkan. Kita dapat menganggap kurva dengan posisi sebagai fungsi waktu. Kurva bisa pergi ke mana saja dan bisa loop dan menyeberang sendiri. Kita juga dapat menganggap kurva memiliki kecepatan di sembarang titik. Misalnya, titik p(t) bergerak perlahan di dekat t = 2 dan dengan cepat antara t =2 dan t =3. Jenis kosakata "titik bergerak" ini sering digunakan ketika membahas kurva parametrik bahkan ketika kurva tidak menggambarkan titik bergerak. Gambar 2.34 Garis parametrik 2D melalui p0 dan p1. Segmen garis yang didefinisikan oleh t ∈[0,1] ditampilkan dalam huruf tebal. Garis Parametrik 2D Garis parametrik pada 2D yang melalui titik p0 = (x0, y0) dan p1 = (x1, y1) dapat ditulis sebagai [ ] = [ + ( − ) + ( − ) ] Karena rumus untuk x dan y memiliki struktur yang mirip, kita dapat menggunakan bentuk vektor untuk p = (x, y) (Gambar2.34): p(t) = p0 + t(p1 − p0). Anda dapat membaca ini dalam bentuk geometris sebagai: "mulai dari titik p0 dan pergi beberapa jarak menuju p1 ditentukan oleh parameter t." Fitur yang bagus dari formulir ini adalah p(0) = p0 dan p(1) = p1. Karena titik berubah secara linier dengan t, nilai t antara p0 dan p1 mengukur jarak fraksional antara titik-titik. Titik dengan t<0 berada di sisi “jauh” p0, dan titik dengan t>1 berada di sisi “jauh” p1. Garis parametrik juga dapat digambarkan hanya sebagai titik o dan vektor d: p(t) = o + t(d).


37 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Ketika vektor d memiliki panjang satuan, garis tersebut diparameterisasikan dengan panjang busur. Ini berarti t adalah ukuran yang tepat dari jarak di sepanjang garis. Setiap kurva parametrik dapat diparameterisasikan dengan panjang busur, yang jelas merupakan bentuk yang sangat nyaman, tetapi tidak semua dapat dikonversi secara analitis. Lingkaran Parametrik 2D Sebuah lingkaran dengan pusat (xc, yc) dan jari-jari r memiliki bentuk parametrik: [ ] = [ + ∅ + ∅ ] Untuk memastikan bahwa ada parameter unik untuk setiap titik pada kurva, kita dapat membatasi domainnya: [0,2π) atau (−π,π] atau interval setengah terbuka lainnya dengan panjang 2π. elips berjajar sumbu dapat dibuat dengan menskalakan persamaan parametrik x dan y secara terpisah: [ ] = [ + ∅ + ∅ ] Kurva Parametrik 3D Kurva parametrik 3D beroperasi seperti kurva parametrik 2D: x = f(t), y = g(t), z = h(t). Misalnya, sebuah spiral di sekitar sumbu z ditulis sebagai: x = cost, y = sint, z = t. Seperti kurva 2D, fungsi f, g, andh didefinisikan pada domain D R jika kita ingin mengontrol di mana kurva mulai dan berakhir. Dalam bentuk vektor kita dapat menulis [ ] = () Dalam bab ini kita hanya membahas garis parametrik 3D secara detail. Garis Parametik 3D Garis parametrik 3D dapat ditulis sebagai perpanjangan lurus ke depan dari garis parametrik 2D, misalnya, x = 2 + 7t, y = 1 + 2t, z = 3 − 5t. Ini rumit dan tidak diterjemahkan dengan baik ke variabel kode, jadi kami akan menulisnya dalam bentuk vektor: p = o + td, di mana, untuk contoh ini, o dan d diberikan oleh o = (2 ,1, 3), d = (7 ,2,−5). Perhatikan bahwa ini sangat mirip dengan kasus 2D. Cara memvisualisasikannya adalah dengan membayangkan bahwa garis melewati o dan sejajar dengan d. Mengingat nilai t berapa pun, Anda mendapatkan beberapa titik p(t) di telepon. Misalnya, pada t = 2 , p(t) = (2, 1, 3) + 2(7, 2, −5) = (16, 5, − 7). Konsep umum ini sama dengan dua dimensi (Gambar 2.30).


38 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Seperti dalam 2D, segmen garis dapat digambarkan dengan garis parametrik 3D dan interval t ∈ [ta, tb]. Ruas garis antara dua titik a dan b diberikan oleh p(t) = a + t(b − a) dengan t ∈ [0, 1]. Di sini p(0) = a, p(1) = b, dan p(0.5) = (a + b)/2, titik tengah antara a dan b. Sinar, garis setengah, adalah garis parametrik 3D dengan interval setengah terbuka, biasanya [0,∞). Mulai sekarang kita akan menyebut semua garis, ruas garis, dan sinar sebagai “sinar”. Ini ceroboh, tetapi sesuai dengan penggunaan umum dan membuat diskusi lebih sederhana. Permukaan Parametrik 3D Pendekatan parametrik dapat digunakan untuk mendefinisikan permukaan dalam ruang 3D dengan cara yang sama seperti kita mendefinisikan kurva, kecuali bahwa ada dua parameter untuk menangani luas permukaan dua dimensi. Permukaan ini memiliki bentuk x = f(u,v), y = g(u,v), z = h(u,v). atau, dalam bentuk vektor, [ ] = (, ) Contoh: Anggap saja Bumi benar-benar bulat, sebuah titik di permukaan Bumi dapat digambarkan dengan Pretend demi argumen bahwa Bumi itu benar-benar bulat. dua parameter garis bujur dan garis lintang. Jika kita mendefinisikan titik asal berada di pusat Bumi, dan misalkan r adalah jari-jari Bumi, maka sistem koordinat bola berpusat di titik asal (Gambar 2.35), mari kita turunkan persamaan parametrik x = rcosϕ sinθ, y = rsinϕ sinθ, z = rcosθ. Idealnya, kami ingin menulis ini dalam bentuk vektor, tetapi tidak layak untuk bentuk parametrik khusus ini. Kami juga ingin dapat menemukan (θ, ϕ) untuk (x, y, z) yang diberikan. Jika kita berasumsi bahwa (−π, π] ini mudah dilakukan dengan menggunakan fungsi atan2 dari Persamaan (2.2): = ( √ + + ) ∅ = (, ) Dengan permukaan implisit, turunan dari fungsi f memberi kita permukaan normal. Dengan permukaan parametrik, turunan dari p juga memberikan informasi tentang geometri permukaan. Gambar 2.35 Geometri untuk koordinat bola.


39 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Pertimbangkan fungsi q(t) = p(t, v0). Fungsi ini mendefinisikan kurva parametrik yang diperoleh dengan memvariasikan u sambil menahan v tetap pada nilai v0. Kurva ini, yang disebut kurva isoparametrik (atau kadang-kadang disingkat "isoparm") terletak di permukaan. Turunan dari q memberikan vektor tangen pada kurva, dan karena kurva terletak di permukaan, vektor q’ juga terletak di permukaan. Karena diperoleh dengan memvariasikan satu argumen dari p, vektorq adalah turunan parsial dari p terhadap u, yang akan kita nyatakan pu. Argumen serupa menunjukkan bahwa turunan parsial pv memberikan garis singgung ke kurva parametrik iso untuk konstanta, yang merupakan vektor tangen kedua ke permukaan. Turunan p, kemudian, memberikan dua vektor tangen pada sembarang titik pada permukaan. Normal ke permukaan dapat ditemukan dengan mengambil perkalian silang dari vektor-vektor ini: karena keduanya bersinggungan dengan permukaan, perkalian silangnya, yang tegak lurus terhadap kedua garis singgung, adalah normal ke permukaan. Aturan tangan kanan untuk perkalian silang menyediakan cara untuk menentukan sisi mana yang merupakan bagian depan, atau bagian luar, dari permukaan; kita akan menggunakan konvensi bahwa vektor n = = pu × pv mengarah ke luar permukaan. Ringkasan Kurva dan Permukaan Kurva implisit dalam 2D atau permukaan dalam 3D didefinisikan oleh fungsi bernilai skalar dari dua atau tiga variabel, f : ℝ2 →ℝ atau f : ℝ3 →ℝ, dan permukaan terdiri dari semua titik di mana fungsinya adalah nol: S = {p|f(p) = 0}. Kurva parametrik dalam 2D atau 3D didefinisikan oleh fungsi bernilai vektor dari satu variabel, p : D ⊂ ℝ →ℝ2 atau p : D ⊂ ℝ →ℝ3 , dan kurva disapu keluar karena t bervariasi pada semua D: S = {p(t)|t ∈ D}. Permukaan parametrik dalam 3D didefinisikan oleh fungsi bernilai vektor dari dua variabel, p : D ⊂ ℝ2 →ℝ3 , dan permukaan terdiri dari gambar semua titik (u, v) dalam domain: S = {p(t)|(u, v) ∈ D}. Untuk kurva dan permukaan implisit, vektor normal diberikan oleh turunan dari f (gradien), dan vektor tangen (untuk kurva) atau vektor (untuk permukaan) dapat diturunkan dari normal dengan membangun basis. Untuk kurva dan permukaan parametrik, turunan dari p memberikan vektor tangen (kurva fora) atau vektor (permukaan fora), dan vektor normal dapat diturunkan dari garis singgung dengan membangun basis. 2.6 INTERPOLASI LINEAR Mungkin operasi matematika yang paling umum dalam grafis adalah interpolasi linier. Kita telah melihat contoh interpolasi linier posisi untuk membentuk segmen garis dalam 2D dan 3D, di mana dua titik a dan b diasosiasikan dengan parameter t untuk membentuk garis p = (1 − t)a + tb. Ini adalah interpolasi karena p melewati a dan b tepat pada t = 0 dan t = 1. Interpolasi linier karena suku bobot t dan 1 − t adalah polinomial linier dari t. Interpolasi linier umum lainnya adalah di antara satu set posisi pada sumbu x: x0, x1, ... , xn, dan untuk setiap xi kita memiliki tinggi yang terkait, yi. Kami ingin membuat fungsi kontinu y = f(x) yang menginterpolasi posisi ini, sehingga f melewati setiap titik data, yaitu, f(xi) = yi. Untuk interpolasi linier, titik-titik (xi, yi) dihubungkan oleh segmen garis lurus. Adalah wajar


40 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) untuk menggunakan persamaan garis parametrik untuk segmen-segmen ini. Parameter t hanyalah jarak pecahan antara xi dan xi+1: () = + − + − ( + − ) Karena fungsi pembobotan adalah polinomial linier dari x, ini adalah interpolasi linier. Dua contoh di atas memiliki bentuk umum dari interpolasi linier. Kami membuat variabel t yang bervariasi dari 0 hingga 1 saat kami berpindah dari item data A ke item data B. Nilai antara hanyalah fungsi (1 t)A + tB. Perhatikan bahwa Persamaan (2.26) memiliki bentuk ini dengan = − + − 2.7 SEGITIGA Segitiga dalam 2D dan 3D adalah model dasar primitif di banyak program grafis. Seringkali informasi seperti warna ditandai ke simpul segitiga, dan informasi ini diinterpolasi melintasi segitiga. Sistem koordinat yang membuat interpolasi menjadi mudah disebut koordinat barycentric; kami akan mengembangkan ini dari awal. Kita juga akan membahas segitiga 2D, yang harus dipahami sebelum kita bisa menggambarnya di layar 2D. Segitiga 2D Jika kita memiliki segitiga 2D yang didefinisikan oleh titik 2D a, b, dan c, pertama-tama kita dapat mencari luasnya: = | − − − − | = ( + + − − − ) Turunan dari rumus ini dapat ditemukan di Bagian 5.3. Daerah ini akan bertanda positif jika titik a, b, dan c berlawanan arah jarum jam dan bertanda negatif, sebaliknya. Seringkali dalam grafis, kami ingin menetapkan properti, seperti warna, di setiap titik segitiga dan dengan lancar menginterpolasi nilai properti itu di segitiga. Ada berbagai cara untuk melakukan ini, tetapi yang paling sederhana adalah menggunakan koordinat barycentric. Salah satu cara untuk memikirkan koordinat barycentric adalah sebagai sistem koordinat nonorthogonal seperti yang telah dibahas secara singkat di Bagian 2.4.2. Sistem koordinat tersebut ditunjukkan pada Gambar 2.36, di mana asal koordinat adalah a dan vektor dari a ke b dan c adalah vektor basis. Dengan asal dan vektor basis tersebut, sembarang titik p dapat ditulis sebagai p = a + β(b−a) + γ(c − a). Perhatikan bahwa kita dapat menyusun ulang suku-suku dalam Persamaan (2.28) untuk mendapatkan p = (1 − β − γ)a + βb + γc. Seringkali orang mendefinisikan variabel baruα untuk meningkatkan simetri persamaan: α ≡ 1 – β – γ yang menghasilkan persamaan p(α, β, γ) = αa + βb + γc dengan kendala bahwa α + β + γ =1


41 Dasar Desain Grafis – Jilid 1 (Dr. Agus Wibowo) Gambar 2.36 Segitiga 2D dengan simpul a, b, c dapat digunakan untuk membuat sistem koordinat nonortogonal dengan vektor asal a dan basis (b – a) dan ( c – a). Sebuah titik kemudian diwakili oleh pasangan terurut (β, γ). Misalnya, titik p = (2.0, 0.5), yaitu p = a + 2.0 (b – a) + 0.5 ( c – a). Koordinat barycentric tampak seperti konstruksi abstrak dan tidak intuitif pada awalnya, tetapi ternyata menjadi kuat dan nyaman. Anda mungkin merasa berguna untuk memikirkan bagaimana alamat jalan akan bekerja di kota di mana ada dua set jalan paralel, tetapi di mana set tersebut tidak tegak lurus. Sistem alami pada dasarnya adalah koordinat barycentric, dan Anda akan segera terbiasa dengannya. Koordinat barycentric didefinisikan untuk semua titik pada bidang. Sebuah fitur yang sangat bagus dari koordinat barycentric adalah bahwa titik p berada di dalam segitiga yang dibentuk oleh a, b, dan c jika dan hanya jika 0 < α < 1, 0 < β < 1, 0 < γ < 1. Jika salah satu koordinatnya nol dan dua lainnya berada di antara nol dan satu, maka Anda berada di tepi. Jika dua koordinat adalah nol, maka yang lain adalah satu, dan Anda berada di sebuah titik. Properti bagus lainnya dari koordinat barycentric adalah bahwa Persamaan (2.29) pada dasarnya mencampur koordinat tiga simpul dengan cara yang mulus. Koefisien pencampuran yang sama (α, β, γ) dapat digunakan untuk mencampur sifat-sifat lain, seperti warna, seperti yang akan kita lihat di bab berikutnya. Diberikan titik p, bagaimana kita menghitung koordinat barycentric? Salah satu caranya adalah dengan menulis Persamaan (2.28) sebagai sistem linier dengan yang tidak diketahui β dan γ, selesaikan, dan tentukan α = 1 – β – γ. Sistem linier tersebut adalah [ − − − − ][ ] = [ − − ] Meskipun mudah untuk menyelesaikan Persamaan (2.31) secara aljabar, sering kali bermanfaat untuk menghitung solusi geometrik langsung. Salah satu sifat geometris dari koordinat barycentric adalah bahwa mereka adalah jarak skala bertanda dari garis melalui sisi segitiga, seperti yang ditunjukkan untuk pada Gambar 2.37. Ingat kembali dari Bagian 2.5.2bahwa menilai persamaan f(x, y) untuk garis f(x, y)=0mengembalikan jarak bertanda skala dari (x, y) ke garis. Ingat juga bahwa jika f(x, y)=0adalah persamaan untuk garis tertentu, demikian juga kf(x,y)=0 untuk sembarang k tak nol. Mengubah k menskalakan jarak dan


Click to View FlipBook Version