May 26, 2012

Grapher

Skenario ini untuk menampilkan fungsi matematika.


Ini link skenario yang udah diupload ke Greenfoot Gallery:
http://www.greenfoot.org/scenarios/3423

Ini screenshootnya:



Berikut ini class-classnya:

  • Graph hmm ini koordinat kartesian berisikan x,y, dengan 1 unit = 1 pixel, dan ada grid 5px*5px. Semua garis yang ada ditampilkan di sini berada dalam variabel "lines" yang merupakan vector. Berikut ini fungsi-fungsi (metode) yang utama, fungsi lain selain ini hanya pendukung untuk menggerakan graph ini(dengan cara digeser)..
    • Graph() -- constructor disini tempat kita membuat/menambahkan garis baru. Dengan membuat objek(sebenernya interface..) "line", dan menambahkannya kedalam kumpulan "lines". 
    • drawMap() -- fungsi ini berisi fungsi drawGrid() sama drawLines(), supaya simple hehe. drawGrid() didahulukan supaya fungsi garisnya tidak nabrak sama grid-gridnya.
    • drawLines() --  ini isinya manggi metode drawGrid() terus drawLine(). Supaya lebih rapih sedikit.
    • drawLine() --  menggambar garis, dari paling kiri ke kanan layar, relatif dengan posisi-x dan posisi-y grafik tersebut. Jadi fungsi ini melakukan sebuah loop dari kiri ke kanan sepanjang layar. Jadi awalnya gini, kita menghitung posisi relatif titik pojok kiri-atas layar itu dengan titik (0, 0). Setelah kita mendapatkan selisih x-nya, kita mulai loop dari kiri-layar, x-nya adalah selisih tadi. Saat ini garis belom digambar. Setelah memasukan x pada fungsi garisnya, maka kita mendapatkan y. Naah, untuk digambar giliran y-nya yang dikurangi dengan jarak layar ke titik (0,0), yang y-nya. Jadi sederhananya (xLayar - x, yLayar + y). Kenapa y tidak dikurang? Karena di Greenfoot(ngga hanya Greenfoot sih, hampir semua), semakin tinggi y-nya, semakin kebawah. Ini lebih sederhana lagi, titik yang kita gambar jadinya adalah dari titik [(xLayar - x) -1, (yLayar - y) -1] ke titik [(xLayar-x), (yLayar-y)]
    • drawGrid() -- kalo yang ini, fungsi untuk gambar garis kotak-kotak. Seperti drawLine(), mulai loop dari layar sebelah kiri (untuk garis vertikal). Lalu posisi relatif x, ditambah dengan loopan, dibagi dengan 5, jika ngga ada sisa bagi maka gambar garis deh di posisi x-layar tersebut. Garis horizontalnya juga seperti ini, namun ingat, semakin kebawah y semakin nambah, jadi harus dinegasiin (dibalikin).
  • GraphInfo -- ini objek buat nampilin info yang ada disebelah kanan, supaya keliatan keren aja haha. Soalnya kita juga ngga tau itu posisinya dimana dan ngga ada tulisan di axisnya.
  • Line --  Interface ini keren! Karena bikin kode disini jadi Object Oriented!
    • function() --  nah disini silahkan membuat fungsi buatan kalian sendiri. Eh tapi di class ini ngga bisa diapa-apain, karena ini cuma interface. Kalo mau buat garis liat petunjuknya di constructor kelas Graph.
    • getColor() --  ini untuk ditambahkan, mau warna apa garis tersebut.
Hehehe..
Tadinya sih niatnya mau nambahin parser, supaya bisa langsung masukin fungsi. Tapi belom sempet.
*Niatnya mau bikin RPN parser sendiri jadinya lama...
*Udah lama jadi sih.. jadi tinggal nambahin elemen GUI aja..

No comments:

Post a Comment