Sunday, November 20, 2011

Membuat Gambar 2D Menggunakan Algoritma

Pemrograman ini mengunakan unsur pewarisan dan package, jadi anda harus mengunakan satu algoritma satu file.java 
Algoritma Digital Differensial Analizer(DDA) 
package GrafKom;
public class DigitalDifferensialAnalizer extends frame{
    public void drawLineDda(int x1, int y1, int x2, int y2){
        float dx, dy, a, b,x,y, xin, yin,langkah;
        dx = x2-x1;
        dy= y2-y1;
        a = Math.round(Math.abs(dx));
        b= Math.round(Math.abs(dy));
        x=x1;
        y = y1;
        if (a>b)
            langkah= a;
            else
                langkah=b;

        xin = dx/langkah;
        yin = dy/langkah;
        px.setPixel(Math.round(x),Math.round(y), warna);
        for(int i = 0;i<langkah;i++)
        {
            x = x+ xin;
            y = y+yin;
            px.setPixel(Math.round(x),Math.round(y), warna);
        //    System.out.println(x+"\t"+y);
        }
    }
}
Algoritma Circle Midpoint
package GrafKom;
public class CircleMidpoint extends frame{

    public void coba(int xCenter, int yCenter, int a, int b){
            px.setPixel(xCenter+a, yCenter+b, warna);
            px.setPixel(xCenter-a, yCenter+b, warna);
            px.setPixel(xCenter+a, yCenter-b, warna);
            px.setPixel(xCenter-a, yCenter-b, warna);
            px.setPixel(xCenter+b, yCenter+a, warna);
            px.setPixel(xCenter-b, yCenter+a, warna);
            px.setPixel(xCenter+b, yCenter-a, warna);
            px.setPixel(xCenter-b, yCenter-a, warna);
    }

    public void drawCircleMidPoint(int xCenter, int yCenter, int radius){
        int a,b,p;
        a=0;
        b=radius;
        p=1-radius;
        coba(xCenter,yCenter,a,b);
        while(a<b){
            a=a+1;
            if(p<0){
                p=p+(2*a+1);
            }
            else{
                b=b-1;
                p=p+(2*(a-b)+1);
            }
            coba(xCenter,yCenter,a,b);
        //    System.out.println(xCenter+"\t"+yCenter+"\t"+a+"\t"+b);
        }
    }
}
Algoritma Kurva Bazier

package GrafKom;
class KurvaBazier extends DigitalDifferensialAnalizer{
    DigitalDifferensialAnalizer d = new DigitalDifferensialAnalizer();
    public void drawKurvaBazier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4){
        double x,y,xt,yt,ax,bx,cx, ay,by,cy;
        double t=0.00005;

        //d.drawLineDda(x1,y1,x2,y2);
        //d.drawLineDda(x3,y3,x4,y4);

        cx=3.0*(x2-x1);
        bx=3.0*(x3-x2)-cx;
        ax=x4-x1-cx-bx;

        cy=3.0*(y2-y1);
        by=3.0*(y3-y2)-cy;
        ay=y4-y1-cy-by;

        x=x1;
        y=y1;
        for(double i=t;i<=1+t;i+=t)
        {
            xt=(ax*i*i*i)+(bx*i*i)+(cx*i)+x1;
            yt=(ay*i*i*i)+(by*i*i)+(cy*i)+y1;
            px.setPixel((int)Math.ceil(x),(int)Math.ceil(y),warna);
            px.setPixel((int)Math.ceil(xt),(int)Math.ceil(yt),warna);
            x=xt;
            y=yt;
        }
    }
}
Algoritma Frame
package GrafKom;
import java.awt.*;
import java.awt.image.*;

public class frame extends Canvas{
    protected static BufferedImage image = new BufferedImage(700, 700, BufferedImage.TYPE_INT_RGB);
    protected static WritableRaster px = image.getRaster();
    protected int [] warna = {255,0,0};

    public void paint(Graphics g){
        g.drawImage(frame.image, 0, 0,null);
    }
}
MAIN
package GrafKom;
import javax.swing.*;

class MainProgram extends JFrame{
    CircleMidpoint c = new CircleMidpoint();
    DigitalDifferensialAnalizer d = new DigitalDifferensialAnalizer();
    KurvaBazier e=new KurvaBazier();
    public MainProgram(){
        setTitle("GRAFKOM");
        add("Center", new frame());
        setSize(700,700);
        setResizable(false);

        //garis
        for (int i=265;i>=250;i--)
            d.drawLineDda(260,80,i,60);
        d.drawLineDda(250,60,330,245);
        d.drawLineDda(251,60,331,245);
        d.drawLineDda(234,70,289,237);
        d.drawLineDda(233,70,288,237);
        d.drawLineDda(235,70,330,245);
        for (int i=234;i>=215;i--)
            d.drawLineDda(i,70,235,80);

        for (int i=300;i>=280;i--)
            d.drawLineDda(70,298,60,i);
        d.drawLineDda(60,300,250,260);
        d.drawLineDda(60,299,250,261);
        d.drawLineDda(60,315,235,300);
        d.drawLineDda(60,316,235,301);
        d.drawLineDda(60,315,250,260);
        for (int i=335;i>=315;i--)
            d.drawLineDda(60,i,70,315);

        for (int i=240;i>=215;i--)
            d.drawLineDda(i,535,240,520);
        d.drawLineDda(250,335,240,530);
        d.drawLineDda(249,334,241,530);
        d.drawLineDda(280,355,255,535);
        d.drawLineDda(281,356,256,536);
        d.drawLineDda(250,335,255,535);
        for (int i=278;i>=258;i--)
            d.drawLineDda(i,540,258,525);

        for (int i=435;i>=410;i--)
            d.drawLineDda(500,405,515,i);
        d.drawLineDda(330,355,520,410);
        d.drawLineDda(329,356,520,411);
        d.drawLineDda(355,330,520,395);
        d.drawLineDda(355,329,520,394);
        d.drawLineDda(330,355,520,395);
        for (int i=395;i>=380;i--)
            d.drawLineDda(505,388,530,i);
       
        for (int i=145;i>=128;i--)
            d.drawLineDda(465,150,482,i);
        d.drawLineDda(360,305,475,135);
        d.drawLineDda(360,306,475,136);
        d.drawLineDda(350,265,460,120);
        d.drawLineDda(350,264,460,119);
        d.drawLineDda(360,305,460,120);
        for (int i=465;i>=448;i--)
        d.drawLineDda(448,135,i,110);

        //lingkaran
        c.drawCircleMidPoint(300,300,299);
        c.drawCircleMidPoint(299,299,299);
        c.drawCircleMidPoint(299,299,298);

        c.drawCircleMidPoint(300,300,280);
        c.drawCircleMidPoint(300,300,275);

        for (int i=265; i>=240; i--)
            c.drawCircleMidPoint(300,300,i);

        for (int i=30;i>=20;i--)
            c.drawCircleMidPoint(300,300,i);

        c.drawCircleMidPoint(300,300,12);
       
        c.drawCircleMidPoint(300,300,7);
        c.drawCircleMidPoint(300,300,6);
        c.drawCircleMidPoint(300,300,5);

        //kurva bazier
        // format drawKurvaBazier(gaisX1awal, garisY1awal, garisX1akhir, garisY1akhir,gaisX2awal, garisY2awal, garisX2akhir, garisY2akhir)
        //1
        e.drawKurvaBazier(250,260, 270,250, 300,250, 282,220);
        e.drawKurvaBazier(251,260, 271,250, 301,250, 283,220);
        //1.1
        //e.drawKurvaBazier(234,70, 271,250, 301,250, 283,220);
        //2
        e.drawKurvaBazier(250,335, 250,315, 255,300, 220,301);
        e.drawKurvaBazier(249,335, 249,315, 254,300, 219,301);
        //3
        e.drawKurvaBazier(330,355, 310,350, 285,340, 280,355);
        e.drawKurvaBazier(329,355, 309,350, 284,340, 279,355);
        //4
        e.drawKurvaBazier(360,305, 355,310, 340,325, 355,330);
        e.drawKurvaBazier(359,305, 354,310, 339,325, 354,330);
        //5
        e.drawKurvaBazier(330,245, 335,255, 340,275, 350,265);
        e.drawKurvaBazier(329,245, 334,255, 339,275, 349,265);
        //1.1
        e.drawKurvaBazier(335,260, 330,240, 288,235, 285,245);
        //2.1
        e.drawKurvaBazier(270,253, 250,260, 235,300, 245,308);
        //3.1
        e.drawKurvaBazier(250,325, 250,340, 280,360, 285,347);
        //4.1
        e.drawKurvaBazier(310,350, 330,355, 360,330, 352,327);
        //5.1
        e.drawKurvaBazier(355,312, 360,305, 350,265, 340,267);
        //6
        //e.drawKurvaBazier(113,448, 118,442, 127,450, 120,462);
        //e.drawKurvaBazier(111,446, 116,440, 125,448, 118,460);
        setVisible(true);
    }

    public static void main (String[] args) {
        new MainProgram();
    }
}
Print Out

Gambar asli
 
 Memang gak mirip, tapi anda setidaknya tau algoritma yang digunakan untuk membuat gambar 2D tersebut.

0 comments:

Post a Comment