Sunday, November 20, 2011

Membuat gambar meja menggunakan java

Source Code
import java.awt.*;

 class meja extends Frame {
    public static void main(String[] args){
        meja ap1 = new meja();
    }
   
    public meja(){
        super();
        setSize(700,500);
       
        Canvasku kanvas = new Canvasku();
        add(kanvas);
       
        show();
    }
}

class Canvasku extends Canvas {
    public void paint(Graphics g) {
    //garis datar
        g.drawLine(485,170,60,170);
        g.drawLine(410,100,140,100);
    //garis miring
        g.drawLine(140,100,60,170);
        g.drawLine(485,170,410,100);
    //garis datar bawah
        g.drawLine(485,175,60,175);
    //garis lurus
        g.drawLine(60,170,60,175);
        g.drawLine(485,170,485,175);
    //garis kaki sebelah kiri
        g.drawLine(80,175,80,350);
        g.drawLine(100,175,100,350);
        g.drawLine(110,220,110,340);
    //garis datar penghubung meja
        g.drawLine(450,220,100,220);
    //garis kaki sebelah kanan
        g.drawLine(470,175,470,350);
        g.drawLine(450,175,450,350);
        g.drawLine(440,220,440,340);
    //garis datar kaki meja
        g.drawLine(100,350,80,350);
        g.drawLine(450,350,470,350);
    //garis miring kaki meja
        g.drawLine(100,350,110,340);
        g.drawLine(450,350,440,340);
    //garis kaki belakang kanan
        g.drawLine(390,220,390,245);
        g.drawLine(380,220,380,260);
        g.drawLine(370,220,370,260);
        g.drawLine(380,295,380,285);
        g.drawLine(390,285,390,295);
        g.drawLine(370,285,380,295);
    //garis kaki belakang kiri
        g.drawLine(160,220,160,245);
        g.drawLine(170,220,170,260);
        g.drawLine(180,220,180,260);
        g.drawLine(160,285,160,295);
        g.drawLine(170,285,170,295);
        g.drawLine(180,285,170,295);
       
    //garis datar miring kaki belakang
        g.drawLine(160,245,170,245);
        g.drawLine(380,245,390,245);
    //gambar paku
        g.drawOval(85,185,10,10);
        g.drawOval(455,185,10,10);
        g.drawLine(85,189,95,189);
        g.drawLine(85,191,95,191);
        g.drawLine(455,189,465,189);
        g.drawLine(455,191,465,191);
    //garis lubang meja
        g.drawLine(270,175,270,220);
        g.drawLine(280,175,280,220);
    //garis lubang kiri
        g.drawLine(105,180,105,215);
        g.drawLine(105,180,265,180);
        g.drawLine(105,215,265,215);
        g.drawLine(265,180,265,215);
    //garis lubang kanan
        g.drawLine(285,180,285,215);
        g.drawLine(285,180,445,180);
        g.drawLine(285,215,445,215);
        g.drawLine(445,180,445,215);
    //garis penghubung meja bawah
        g.drawLine(110,295,160,245);
        g.drawLine(110,305,170,245);
        g.drawLine(156,260,395,260);
        g.drawLine(146,270,405,270);
        g.drawLine(146,285,405,285);
    //garis miring meja penghubung
        g.drawLine(440,295,390,245);
        g.drawLine(440,305,380,245);
        g.drawLine(440,320,405,285);
        g.drawLine(405,270,405,285);
        g.drawLine(146,270,146,285);
        g.drawLine(110,320,145,285);
       
    //garis serat kayu   
        g.drawLine(130,110,422,110);
        g.drawLine(118,120,430,120);
        g.drawLine(107,130,442,130);
        g.drawLine(93,140,452,140);
        g.drawLine(83,150,463,150);
        g.drawLine(71,160,473,160);
    //garis datar kaki belakang tmbahan
        g.drawLine(170,295,160,295);
        g.drawLine(380,295,390,295);
    //garis bayangan meja
        g.drawLine(105,215,140,180);
        g.drawLine(445,215,410,180);   
    }
}
Prrint Out

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.