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 Midpointpackage 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 Framepackage 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);
}
}
MAINpackage 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 OutGambar asli
Memang gak mirip, tapi anda setidaknya tau algoritma yang digunakan untuk membuat gambar 2D tersebut.


0 comments:
Post a Comment