Jumat, 30 September 2016

Komputer Grafik - Membuat Program Bangun Datar

Komputer Grafik – Membuat Program Bangun Datar


Hello guy, ketemu lagi di blog saya. Masih semangat kan ? Tentu dong jangan patah semangat. Oh ya kali ini aku akan post tentang program bangun datar. Kalian pasti pernah mendengar yang namanya bangun datar pas jaman SD. Bangun datar itu digambarkan suatu bangun yang hanya punya panjang dan lebar saja alias 2 dimensi. Bangun datar itu seperti persegi, persegi panjang, segitiga, lingkaran, dan lain – lain. Nah, untuk blog kali ini saya akan kasih contoh program bangun datar dengan bahasa Java dengan menggunakan GUI alias ada gambarnya. Serukan hehe.... Untuk membuat program ini tidak susah kok hanya sederhana saja.

Okay, aku akan membahasnya. Pertama seperti biasa buat project baru pada program java. Software yang saya gunakan adalah Netbeans ( pakai Eclipse boleh ). Cara membuat project baru : File – New Project – (Java – Java Application) – Next – Buat nama project – Finish. Jika masih belum paham bisa diliat pada blog dengan kode 005-001. Setelah itu, ikuti langkah di bawah ini :
1.         Menyusun komponen – komponen GUI dengan bentuk seperti di bawah ini :



Bentuk GUI Utama



Bentuk GUI Pada Tab Persegi



Bentuk GUI Pada Tab Persegi Panjang


Bentuk GUI Pada Tab Lingkaran

Dengan Navigator seperti ini :




2.        Klik Source dan kemudian tambahkan source code pada bagian kontruktor-nya : ( warna merah )

public class ProgramBangunDatar extends javax.swing.JFrame {
    public ProgramBangunDatar() {
        initComponents();
        jScrollPane1.setViewportView(new Grafik());
    }
    @SuppressWarnings("unchecked")

3.         Setelah membentuk di atas, klik Tab Persegi dan klik double pada tombol Tampilkan sehingga akan muncul seperti ini :


Kemudian pada bagian program ini akan dibuat source code seperti ini :

private void Tampil_PersegiActionPerformed(java.awt.event.ActionEvent evt) {                                              
        String S = P_persegi.getText();
        String Xp = Xp_persegi.getText();
        String Yp = Yp_persegi.getText();
        jScrollPane1.setViewportView(new Grafik(Double.parseDouble(S), Double.parseDouble(Xp), Double.parseDouble(Yp), 1));
    }    

4.         Lanjut lagi ke desain JFrame-nya, sekarang klik Tab Persegi Panjang à klik double pada tombol Tampilkan yang akan muncul seperti ini :


Bentuk source code seperti ini :

private void Tampil_PersegiPanjangActionPerformed(java.awt.event.ActionEvent evt) {                                                      
        String P = P_persegipanjang.getText();
        String L = L_persegipanjang.getText();
        String Xp = Xp_persegipanjang.getText();
        String Yp = Yp_persegipanjang.getText();
        jScrollPane1.setViewportView(new Grafik(Double.parseDouble(P), Double.parseDouble(L), Double.parseDouble(Xp), Double.parseDouble(Yp), 2));
    }   

5.         Begitupula pada Tab Lingkaran, dengan teknik yang sama pada langkah no 3 dan 4 akan membentuk source code seperti ini


Kemudian tambahkan source codenya :

private void Tampil_LingkaranActionPerformed(java.awt.event.ActionEvent evt) {                                                
        String R = Radius.getText();
        String Xp = Xp_lingkaran.getText();
        String Yp = Yp_lingkaran.getText();
        jScrollPane1.setViewportView(new Grafik(Double.parseDouble(R), Double.parseDouble(Xp), Double.parseDouble(Yp), 3));
    }   

6.         Dengan begitu, desain program JFrame sudah selesai.

Selanjutnya adalah membuat program gambar bangun datar dan grid-nya alias koordinat garis. Nama
kelasnya “Grafik.java”. untuk bentuk kodingannya dapat dilihat di bawah ini :

import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
public class Grafik extends JPanel {
    private int width = 200, height = 200, grid = 20;
    private double S, P, L, R, Xpusat, Ypusat;
    private int pilih;
   
    public Grafik () { }
   
    // Kontraktor untuk memberi ukuran dan titik awal pada persegi atau lingkaran
    public Grafik (double s, double xp, double yp, int p) {
        Xpusat = xp;
        Ypusat = yp;
        if (p == 1) { // Untuk menggambar persegi
            S = s;
            pilih = p;
        }
        else if (p == 3) { // Untuk menggambar lingkaran
            R = s;
            pilih = p;
        }
    }
   
    // Kontraktor untuk memberi ukuran dan titik awal pada persegi panjang
    public Grafik (double p, double l, double xp, double yp, int z) {
        P = p;
        L = l;
        Xpusat = xp;
        Ypusat = yp;
        pilih = z;
    }
   
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.setBackground(Color.WHITE); // Warna background Grid
        Graphics2D gr = (Graphics2D)g;
       
        // Grid
        for(int i = 0; i <= width; i += grid) {
            int angka = i / grid; // Variabel untuk nyimpen angka di grid
            g.setColor(Color.LIGHT_GRAY); // Warna grid
            g.drawLine(i, 0, i, height); // Garis Y
            g.drawLine(0, i, width, i); // Garis X
            if(angka == 0) {}
            else {
                gr.setColor(Color.BLACK); // Warna angka
                gr.setStroke(new BasicStroke(1)); // Tebal angka
                if(angka < 10) {
                    gr.drawString("" +angka, width / 2 + i - 8, height / 2 + 13); // Angka sumbu X < 10
                    gr.drawString("" +angka, width / 2 - 10, height / 2 - i + 5); // Angka sumbu Y < 10
                    gr.drawString("" +(-angka), width / 2 - 15, height / 2 + i + 5); // Angka negatif sumbu Y < 10
                }
                else {
                    gr.drawString("" +angka, width / 2 + i - 13, height / 2 + 13); // Angka sumbu X >= 10
                    gr.drawString("" +angka, width / 2 - 15, height / 2 - i + 5); // Angka sumbu Y >= 10
                    gr.drawString("" +(-angka), width / 2 - 20, height / 2 + i + 5); // Angka negatif sumbu Y >= 10
                }
                gr.drawString("" +(-angka), width / 2 - i - 13, height / 2 + 13); // Angka negatif sumbu X
            }
        }
        gr.setStroke(new BasicStroke(2)); // Tebal garis pusat (objek)
        gr.setColor(Color.BLACK); // Warna garis pusat
        gr.drawLine(0, height / 2, width, height / 2); // Garis pusat X
        gr.drawLine(width / 2, 0, width / 2, height); // Garis pusat y
       
        // Bagian ini adalah proses menampilkan gambar
        // case 1 -> gambar persegi, case 2 -> gambar persegi panjang, case 3 -> gambar lingkaran
        switch (pilih) {
            case 1 : gr.draw(new Rectangle2D.Double(width/2 + Xpusat*grid, height/2 - Ypusat*grid, S*grid, S*grid));
                     break;
            case 2 : gr.draw(new Rectangle2D.Double(width/2 + Xpusat*grid, height/2 - Ypusat*grid, P*grid, L*grid));
                     break;
            case 3 : gr.draw(new Ellipse2D.Double(width/2 + Xpusat*grid, height/2 - Ypusat*grid, 2*R*grid, 2*R*grid));
                     break;
        }
    }
}

Dan akhirnya program bangun datar sudah jadi.


Untuk hasil running-nya dapat dilihat di bawah ini :




Tampilan Awal Pada Program Bangun Datar




Menggambar persegi dengan s = 2 dan titik awal ( pojok kiri atas ) dengan x = 1 dan y = 1



Menggambar persegi panjangdengan p = 2, l = 3 dan titik awal ( pojok kiri atas ) dengan x = -2 dan y = 3



Menggambar lingkaran dengan r = 3 dan titik awal ( pojok kiri atas ) dengan x = -4 dan y = -2


Jadi, gimana ? mudahkan buat program bangun datar. 
Sebenarnya selain menggunakan Java, bisa juga menggunakan library Processing ( nanti aku akan post selanjutnya ). Ya semoga bermanfaat buat kalian yang kesulitan buat program bangun datar. Jika ada yang kesulitan bisa komen ke aku. 


#SemangatHidup

"Desain bagus, perancangan bagus, dan menarik. Namun, jika anda melupakan pondasi, hasilnya akan hancur total"
By : Kelvin Herwanda Tandrio

Referensi :

Kelvin H Tandrio, Hanif Sultan R, Faizah Yasarah, dan Nadya Ranti Agnestya. 2016. Laporan . Universitas Sebelas Maret. Surakarta

Enterprise, Jubilee. 2015. Kumpulan Aplikasi Java. Penerbit : PT Elex Media Komputindo. Jakarta

H. M. Deitel, P. J. Deitel and S. E. Santry. 2001. Advanced Java 2 Platform How To Program. Prentice Hall. New Jersey.








Jumat, 16 September 2016

Pengolahan Citra Digital – Menampilkan Gambar dari Direktori [005-001]

Menampilkan Gambar dari Direktori 


Hello guy, ketemu lagi di blog saya. Sekarang blog ini aku akan membahas tentang Pengolahan Citra Digital. Citra dapat diartikan sebagai gambar. Jadi, Pengolahan Citra Digital itu adalah kumpulan data yang objeknya berupa gambar. Jadi, data dalam bentuk gambar akan dirilis dengan berbagai formula tertentu. Tentunya, jika ingin buat program yang berkaitan dengan citra, maka harus dibuat program inputan data gambar dari direktori. Nah, disini saya akan kasih tips gimana caranya membuat program untuk menampilkan data gambar dari direktori. Untuk pemrograman ini akan menggunakan bahasa pemrograman Java.

Bentuk program ini akan dibentuk dalam GUI. Nah, itu membuat program Java pertama – tama buat project baru dalam bentuk tipe JFrame From. Untuk langkahnya dapat diuraikan sebagai berikut :
1.         Buka software Netbeans.
2.         Tunggu software tersebut berjalan hingga muncul tampilan di bawah ini.



3.         Pilih File -> New Project 



4.         Pilih Java dan Java Application, Pilih Next



Kemudian kasih nama project misalkan “ReadImage” dan di OK. Maka akan muncul seperti di bawah ini.



5.         Kemudian buat hiasan JFrame seperti di bawah ini.



Bentuk JFrame di atas ada 4 komponen yaitu :
a.       JLabel sebanyak 1 -> dikasih nama “Menampilkan Citra dengan Memilih Menu”
b.      JPanel sebanyak 1.
c.       JTextArea sebanyak 1 ( di dalam JPanel ).
d.      JButton sebanyak 1 -> nama button “Pilih Menu”

6.        Setelah itu, pilih Source
Maka akan muncul seperti ini :



7.      Pada bagian baris , tambahkan source code ( warna merah ) di bagian kontraktor sehingga akan membentuk program seperti ini :

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class ReadImage2 extends javax.swing.JFrame {
    private String filename;
   
    public ReadImage2() {
        initComponents();
        /* Source code yang ditambahkan
        jPanel1 = new PanelCitraLewatMenu("");
        jPanel1.repaint();
        jScrollPane1.setViewportView(jPanel1);
        jPanel1.setAutoscrolls(true);
        */
    }
    @SuppressWarnings("unchecked")

8.         Kemudian pilih Desain dan muncul kembali seperti ini :
Pada button “Pilih Menu”, klik 2 kali sehingga akan muncul seperti ini :


9.         Pada bagian button “Pilih Menu” tambahkan source code ( warna merah ) seperti ini

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        int returnVal = jFileChooser1.showOpenDialog(this);
        if (returnVal == jFileChooser1.APPROVE_OPTION) {
            filename = jFileChooser1.getSelectedFile().toString();
            jPanel1 = new PanelCitraLewatMenu(filename);
            jPanel1.repaint();
            jScrollPane1.setViewportView(jPanel1);
            jPanel1.setAutoscrolls(true);
        }
    }     

10. Kemudian pada bagian source code ini akan dibuat kelas PanelCitraLewatMenu untuk memunculkan gambar. Bentuk source code-nya seperti ini :

class PanelCitraLewatMenu extends JPanel {
    private ImageIcon Ikoncitra;
    private Image citra;
   
    // Proses menampilkan citra dari direktori yang dipilih
    public PanelCitraLewatMenu (String gambar) {
        Ikoncitra = new ImageIcon(gambar);
        citra = Ikoncitra.getImage();
    }
   
    protected void paintComponent (Graphics g) {
        super.paintComponent(g);
        if (citra != null)
            g.drawImage(citra, 0, 0, getWidth(), getHeight(), this);
    }
}

Keterangan :
Jangan lupa untuk import java untuk mendukung panel, image, graphics, dan paintComponent. Import java tersebut adalah

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

11.     Maka, pembuatan program tersebut selesai.

Maka, jika dijalankan akan diperoleh hasil di bawah ini :
1.         Awalan Tampilan Jendela.


2.         Klik button “Pilih Menu” akan muncul seperti ini :



3.         Pilih file gambar dengan tipe apapun.
a.       Direktori : E:\Jadwal Kuliah Semester 5.png



b.      Direktori : E:\BLOGGER\Other\image



Bagaimana ? Mantap kan hehe... Itu sedikit penjelasan tentang program menampilkan gambar lewat direktori dengan bahasa Java. Jadi, intinya adalah pada fungsi jFIleChooser itulah yang akan melakukan proses pencarian data gambar dalam direktori tersebut. 

Okay, sekian dulu dari blog saya ya. Kalau ada yang mau tanyakan monggo dikomen atau boleh di CP ( copy paste ) untuk tugas :v

#SemangatHidup




Rabu, 14 September 2016

Pengolahan Sinyal Digital-Gelombang Diskrit Bag. 1 [006-001]

PENGOLAHAN SINYAL DIGITAL – Gelombang Diskrit [ Bagian 1 ]


Dalam pengolahan sinyal, ada 2 tipe yaitu sinyal analog dan sinyal digital. Sinyal analog dapat digambarkan dalam bentuk diskrit sedangkan sinyal digital dalam bentuk gelombang atau dapat dikatakan bersifat kontinu. (Li Tan, 2008 ) Dalam pengolahan sinyal digital ini, filter analog memproses input analog untuk mendapatkan sinyal band terbatas yang akan dikirim ke Analog Digital Convertion ( ADC ) yang terdiri dari Unit ADC sampel sinyal analog, sampel dan pengkodean tingkat sinyal terkuantisasi dengan sinyal digital.

Pada blog ini akan membahas tentang Gelombang Diskrit yang artinya adalah signal analog. Untuk proses pembuatan sinyal analog ini dapat menggunakan program MATLAB dan Java. Jika anda menggunakan bahasa C/C++ tidak masalah hanya program C/C++ tidak mampu dibuat dalam bentuk GUI. Untuk membuat sinyal analog dalam program Java, terlebih dahulu saya akan menjelaskan proses pembuatan dengan menggunakan MATLAB terlebih dahulu kemudian saya akan menerjemahkan ke dalam Java.

Secara umum, bentuk formula pada sinyal baik analog maupun digital akan dibentuk dengan fungsi F(x). Misalkan jika ingin membuat sinyal sinus dengan bentuk fungsi F(x) = A sin (bx) maka anda bisa membuat program sinyal analog dengan menggunakan rumus formula tersebut. Dalam bentuk formula tersebut, anggap saja A itu sebagai nilai amplitudo sehingga kita dapat mengetahui seberapa besar amplitudo pada sinyal yang dibentuk.

Baiklah, saya akan memberi contoh program sinyal analog dengan menggunakan MATLAB dan Java. Namun, sebelum ke arah Java, kita buat dulu dalam MATLAB setelah itu tinggal dicopy saja ke dalam bahasa Java. Berikut ini adalah bentuk programnya :

A.        Program Sinyal Analog Dalam MATLAB
Untuk membuatan program sinyal analog dengan menggunakan MATLAB, tinggal menentukan nilai a ≤ t ≤ b kemudian menginput nilai A dan b dan membentuk formula F(x) yang sudah ditulis sebelumnya. Setelah itu, tinggal menggunakan fungsi stem dan set untuk menggambar grafik sinyal analog. Bentuk programnya seperti di bawah ini :

n = 0:1:40; % sample index from 0 to 20
x = sin(0.1*pi*n); % Evaluate f(x) = sin (0,1πn)
Hs = stem(n,x,’b’,’filled’); % Stem-plot with handle Hs
set(Hs,’markersize’,4); % Change circle size
xlabel(’n’); ylabel(’x(n)’); % Label axis
title(’Stem Plot of sin(0.2 pi n)’); % Title plot

Dengan begitu, jika dijalankan akan diperoleh hasil seperti di bawah ini :

B.        Program Sinyal Analog Dalam JAVA
Untuk bentuk program sinyal analog dengan Java cukup melihat bentuk kodingan dari MATLAB dan diterjemahkan ke dalam Java sesuai syntaxnya. Karena program yang kita buat dalam bentuk gambar, maka kita bisa menggunakan Processing yang setara dengan Java. Anda bisa download program Processing lewat google atau bisa lewat alamat web di sini. Bentuk programnya dapat dilihat di bawah ini :


float[] x = new float [41];
float[] y = new float [41];

void setup() {
  background(255);
  size(400,400);
  noLoop();
}

void draw() {
  line(0, height/2, width, height/2); // Membuat garis tengah
 
  // Membuat kotak - kotak dengan ukuran 5 x 4
  strokeWeight(0.1);
  for (int i = 50; i <= width; i+=50)
    line (i,0, i, height);
  for (int i = 40; i <= height; i+=40)
    line (0,i, width, i);
  strokeWeight(1);
 
  /* Pada gambar grafik ini tiap pixel x dan y berbeda
     sumbu-x : tiap satuan bernilai 10 pixel
     sumbu-y : tiap satuan bernilai 200 pixel
  */
  for (int i = 0; i < x.length; i++) {
    x[i] = i; // Mendefinisikan nilai x[i]
    y[i] = (float) Math.sin(0.1*PI*x[i])*200; // Mendefinisikan nilai y[i] dengan f(x) = sin (0.1*pi*x)
    line (x[i]*10, height/2, x[i]*10, height/2 - y[i]); // Membuat garis yang akan membentuk sinyal analog
  }
}
Sehingga hasil outputnya akan diperoleh seperti di bawah ini :
( Pada sumbu-X, tiap kotak bernilai 5 satuan sedangkan sumbu-Y tiap kotak bernilai 0.2 satuan dilihat dari garis tengah )



Dengan begini, anda sudah bisa membentuk sebuah sinyal diskrit dengan menggunakan bahasa Java. Tetapi, untuk saat ini pada bagian ini sampai sini terlebih dahulu karena untuk menerapkan gambar grafik sinyal diskrit harus menggunakan Library. Untuk pembahasannya akan dilanjutkan pada bagian 2. Okay sampai di sini dulu ya dari blog saya. Tetap semangat dan jangan menyerah :)

Referensi :
Proakis, John G & Vinay K. Ingle. 2012. Digital Signal Processing Using MATLAB 3th. Northeastern University. Cengage Learning


Li Tan. 2008. Digital Signal Processing Fundamentals and Application. Elsevier

#SemangatHidup:)

“Jangan pernah takut untuk selalu mencoba. Karena dengan selalu mencoba, anda bisa menemukan jawaban bahkan bisa menemukan misteri dengan tidak sengaja”
By : Kelvin Herwanda Tandrio