[Python Tkinter]: Membuat Grafik Bifolium dengan Komponen Canvas Tkinter

Halo PythonMania, Apa Kabar Hari Ini?
Di hari yang DAHSYAT ini, kami akan menyajikan ‘sesuatu’ yang DAHSYAT pula untuk Anda, PythonMania!. Pada edisi kita kali ini, kami akan membahas tentang “Bagaimana Membuat Grafik BIFOLIUM dengan Komponen Canvas – Tkinter?”. Dan ternyata Sangat MUDAH! So…Langsung aja ke TeKaPe!

Bunga Bifolium yang sangat indah.

Bunga Bifolium yang sangat indah.

Bifolium merupakan nama dari jenis bunga dan mempunyai bentuk yang sangat indah, seperti gambar di atas. Bentuk bunga ini dapat ‘diprediksikan’ dengan sebuah rumusan berikut ini:


Nah, berdasarkan rumusan tersebut di atas, kita akan memulai petualangan yang seru ini tentunya masih bersama Python. Konsentrasi sejenak ya…

Program Demo Bifolium ini menggunakan module tambahan yaitu module math (module bawaan Python). Fungsi dari module math ini adalah untuk menjalankan fungsi-fungsi matematika, diantaranya sinus, cosinus, dan Pi (=3,14…). Untuk menggunakan module math, kita harus menambahkan kode berikut,

import math

Pada komponen Canvas, yang kita perlukan untuk menggambar garis adalah dengan memanggil fungsi create_line. Kita juga bisa mengatur warna dan ketebalan dari garis grafik yang akan kita tampilkan.

Komponen Tkinter: Frame, Label, Button, Canvas.
Kode Program:

# file: DemoBifolium.py
# Deskripsi: Membuat grafik Bifolium dengan
#		menggunakan komponen Canvas-Tkinter.
#
# Python ver. 2.6
# Sistem Operasi: Debian 6 (squeeze)
# Tgl pembuatan: 4 Januari 2013 - 22.39 WIB
# Penulis: KlinikPython.wordpress.com
#
# Buku Acuan : A First Course In Computational Physics
#


from Tkinter import *
import math


class DemoBifolium:
	def __init__(self, induk, judul):
		self.induk = induk
		
		#self.induk.geometry("400x200")
		self.induk.title(judul)
		self.induk.protocol("WM_DELETE_WINDOW", self.tutup)
		self.induk.resizable(False, False)
		
		self.aturKomponen()
		self.aturGrafik()
		
	def aturKomponen(self):
		# atur frame utama
		mainFrame = Frame(self.induk)
		mainFrame.pack(fill=BOTH, expand=1)
		
		# atur frame Canvas
		fr_canvas = Frame(mainFrame, bd=10)
		fr_canvas.pack(side=TOP, fill=BOTH, expand=1)
		
		# atur label Bifolium
		Label(fr_canvas, text="Grafik Bifolium :").pack(
				side=TOP, anchor=W)
		
		# atur canvas
		self.cvsBifolium = Canvas(fr_canvas, width=300, height=300,
				bg='white')
		self.cvsBifolium.pack(side=TOP, pady=5)
		
		# atur tombol Keluar
		self.btnKeluar = Button(fr_canvas, text='Keluar',
				command=self.tutup)
		self.btnKeluar.pack(side=BOTTOM)
		
		# atur statusbar
		Label(mainFrame, text='www.KlinikPython.wordpress.com',
				bd=1, relief=RIDGE, foreground='blue').pack(
				side=BOTTOM, fill=X)
				
	def aturGrafik(self):
		# atur nilai awal
		A = 300
		theta = 0
		x1 = y1 = 0
		
		# buat garis sumbu kartesian berwarna biru
		self.cvsBifolium.create_line(0, 150, 300, 150, fill='blue')
		self.cvsBifolium.create_line(150, 0, 150, 300, fill='blue')
		
		# buat grafik Bifolium berdasarkan rumusan yang berlaku
		# buat garis sampai theta bernilai Pi(=3.1415926535897931)
		while (theta <= math.pi):
			# rumusan bifolium
			r = A * math.sin(theta) * pow(math.cos(theta), 2)

			# konversi koordinat polar ke koordinat kartesian
			x2 = r * math.cos(theta)
			y2 = r * math.sin(theta)
			
			# gambar garis, dimulai dari pusat Canvas
			self.cvsBifolium.create_line(150+x1, 150-y1, 150+x2, 150-y2,
					fill='red', width=2)
			
			# berikan posisi baru ke posisi lama
			x1 = x2
			y1 = y2
			
			# pertambahan theta sebesar 0,001
			theta += 0.001
			
	def tutup(self, event=None):
		self.induk.destroy()
		
if __name__ == '__main__':
	root = Tk()
	
	app = DemoBifolium(root, ":: Demo Bifolium with Canvas-Tkinter ::")
	
	root.mainloop()

Tampilan Program:

Tampilan Grafik Bifolium versi Python.

Tampilan Grafik Bifolium versi Python.

Latihan Mandiri:
Buatlah grafik untuk rumusan-rumusan di bawah ini dan Anda akan menemukan ‘sesuatu’ yang DAHSYAT!
(1) Cissoid of Diocles

(2) Chocleoid

(3) Folium of Descartes

Sumber Buku: A First Course In Computational Physics, Paul L. DeVries

Woke…Semoga Bermanfaat dan Salam PythonMania!

About these ads

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s