0% found this document useful (0 votes)
55 views11 pages

Tugas Algoritma Output Primitif

The document discusses algorithms for drawing basic graphics primitives in Java, including: 1. Broken and solid lines using the DDA and Bresenham's line algorithms. Pseudocode and sample output are provided. 2. Circles drawn using a circle midpoint algorithm, showing the calculation of x,y coordinates around the circle. Sample output of circles drawn as broken lines is shown. 3. The document was created by computer science students for a computer graphics course project on implementing basic graphics algorithms in Java.

Uploaded by

M.Firdaus Putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views11 pages

Tugas Algoritma Output Primitif

The document discusses algorithms for drawing basic graphics primitives in Java, including: 1. Broken and solid lines using the DDA and Bresenham's line algorithms. Pseudocode and sample output are provided. 2. Circles drawn using a circle midpoint algorithm, showing the calculation of x,y coordinates around the circle. Sample output of circles drawn as broken lines is shown. 3. The document was created by computer science students for a computer graphics course project on implementing basic graphics algorithms in Java.

Uploaded by

M.Firdaus Putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

TUGAS GRAFIKA KOMPUTER

(MEMBUAT ALGORITMA OUTPUT PRIMITIF)

DISUSUN OLEH:

MUHAMMAD FIRDAUS PUTRA (1507111532)

MUHAMMAD SYAFI’I (1507111183)

PROGRAM STUDI TEKNIK INFORMATIKA S1 2015


JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS RIAU
2017
1. Garis Putus-Putus

a. Source Code
import java.awt.Color;
import java.awt.Graphics;
import static java.lang.Math.abs;
import static java.lang.Math.round;
import javax.swing.JPanel;

public class DDA extends JPanel{

@Override
protected void paintComponent (Graphics g) {
super.paintComponents(g);
int baris,kolom;
int x1, x2, y1, y2, xab, yab, step = 0, k, dx, dy;
float xi, yi, yn, xn;
x1 = 3;
y1 = 2;
x2 = 10;
y2 = 2;
dy = y2-y1;
dx = x2-x1;
if (abs(dy)>abs(dx))
step = abs(dy);
else if (abs(dx)>abs(dy))
step = abs(dx);
xi = dx/(float)step;
yi = dy/(float)step;
g.drawString("Selisih X = "+dx, 20, 20);
g.drawString("Selisih y = "+dy, 20, 40);
g.drawString("Step = "+step, 20, 60);
g.drawString("Increment x = "+xi, 20, 80);
g.drawString("Increment y = "+yi, 20, 100);

for (kolom=0;kolom<=4;kolom++)
{
if(kolom==1)
g.drawString("k", 20, 120);
if(kolom==2)
g.drawString("X", 50, 120);
if(kolom==3)
g.drawString("Y", 115, 120);
if(kolom==4)
g.drawString("Pembulatan", 170, 120);
}
xn=x1;
yn=y1;
k = -1;
if(step==abs(dx))
for (baris=1;baris<=step+1;baris++)
{
yab = round(yn);
xab = round(xn);
if(k==-1){
g.drawString(""+xn, 45, 120+(20*baris));
g.drawString(""+yn, 110, 120+(20*baris));
g.drawString(""+xab, 190, 120+(20*baris));
}
else{
g.drawString(""+k, 20, 120+(20*baris));
g.drawString(""+xn, 45, 120+(20*baris));
g.drawString(""+yn, 110, 120+(20*baris));
g.drawString(""+xab, 190, 120+(20*baris));
}
xn=xn+xi;
yn=yn+yi;
prosesGambar(g, k, step, xab, yab, xn, yn);
k++;
}

if(step==abs(dy))
for (baris=1;baris<=step+1;baris++)
{
yab = round(yn);
xab = round(xn);
if(k==-1){
g.drawString(""+xn, 45, 120+(20*baris));
g.drawString(""+yn, 110, 120+(20*baris));
g.drawString(""+xab, 190, 120+(20*baris));
}
else{
g.drawString(""+k, 20, 120+(20*baris));
g.drawString(""+xn, 45, 120+(20*baris));
g.drawString(""+yn, 110, 120+(20*baris));
g.drawString(""+xab, 190, 120+(20*baris));
}
int oldx = xab;
int oldy = yab;
xn=xn+xi;
yn=yn+yi;
prosesGambar(g, k, step, oldx, oldy, xn, yn);
k++;
}
}
public void prosesGambar(Graphics g, int k, int step, int
oldx, int oldy, float xn, float yn){
if(k<step-1)
for(int a = 0; a<10; a++)
g.drawLine(oldx*20, 500-(oldy*20)+a,
round(xn)*20, 500-(round(yn)*20)+a);
if(k<step-1)
for(int a = 0; a<round(xn)*20; a++)
if(a==1)
g.drawLine(oldx*20, 550-(oldy*20), oldx*20+a*10,
550-(round(yn)*20));
if(k<step-1)
for(int a = 0; a<20; a++)
if(a%2==0)
g.drawLine(oldx*20+a, 600-(oldy*20), oldx*20+a,
600-(oldy*20));
}
}

b. Screenshoot
2. Garis Titik-Titik

a. Source Code
import java.awt.Color;
import java.awt.Graphics;
import static java.lang.Math.abs;
import static java.lang.Math.round;
import javax.swing.JPanel;

public class Bressenham extends JPanel{

@Override
protected void paintComponent (Graphics g) {
super.paintComponents(g);
int baris,kolom;
int x1, x2, y1, y2, p, pi, k, xn, yn, xa, ya;
int dx, dy;
x1 = 3;
y1 = 2;
x2 = 10;
y2 = 2;
if(x1<x2){
dy = y2-y1;
dx = x2-x1;
xn = x1;
yn = y1;
xa = x2;
ya = y2;
}
else {
dy = y1-y2;
dx = x1-x2;
xn = x2;
yn = y2;
xa = x1;
ya = y1;
}
p = (2*dy)-(dx);
pi = (2*dy)-(2*dx);
g.drawString("Selisih X = " +dx, 20, 20);
g.drawString("Selisih y = " +dy, 20, 40);
g.drawString("P0 = " +p, 20, 60);
g.drawString("Incremen P = " +pi, 20, 80);
for (kolom=0;kolom<=4;kolom++)
{
if(kolom==1)
g.drawString("k", 20, 100);
if(kolom==2)
g.drawString("Pk", 50, 100);
if(kolom==3)
g.drawString("X", 115, 100);
if(kolom==4)
g.drawString("Y", 170, 100);
}
k = -1;
for (baris=xn;baris<=xa;baris++)
{
int oldx = xn;
int oldy = yn;
if(p<0&&k>-1)
{
p = p+(2*dy);
}
else if(p>-1)
{
yn++;
p = p+pi;
}
if(k==-1){
g.drawString(""+p, 45, 60+(20*baris));
g.drawString(""+xn, 110, 60+(20*baris));
g.drawString(""+yn, 170, 60+(20*baris));}
else{
g.drawString(""+k, 20, 60+(20*baris));
g.drawString(""+p, 45, 60+(20*baris));
g.drawString(""+xn, 110, 60+(20*baris));
g.drawString(""+yn, 170, 60+(20*baris));}
xn++;
prosesGambar(g, k, xa, oldx, oldy, xn, yn);
k++;
}

}
public void prosesGambar(Graphics g, int k, int xa, int oldx,
int oldy, float xn, float yn){
if(k<xa)
for(int a = 0; a<10; a++)
g.drawLine(oldx*20, 500-(oldy*20)+a,
round(xn)*20, 500-(round(yn)*20)+a);
if(k<xa)
for(int a = 0; a<round(xn)*20; a++)
if(a==1)
g.drawLine(oldx*20, 550-(oldy*20), oldx*20+a*10,
550-(round(yn)*20));
if(k<xa)
for(int a = 0; a<20; a++)
if(a%2==0)
g.drawLine(oldx*20+a, 600-(oldy*20), oldx*20+a,
600-(oldy*20));
}
}

b. Screenshoot

3. Garis Tebal

a. Source Code

import java.awt.Color;
import javax.swing.JFrame;

/**
*
* @author Natan
*/
public class Utama extends JFrame {
public Utama () {
setTitle ("Garis");
add (new DDA());
}

public static void main(String[] args) {


Utama frame = new Utama ();

frame.setSize(800,700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Test");

}
}

b. Screenshoot

4. Lingkaran Putus-Putus dan Lingkaran Memiliki Fill

a. Source Code

import java.awt.Color;
import java.awt.Graphics;
import static java.lang.Math.abs;
import static java.lang.Math.round;
import javax.swing.JPanel;

public class Lingkaran extends JPanel{

@Override
protected void paintComponent (Graphics g) {
super.paintComponents(g);
int x, r, p, k, kolom, baris;
r = 20;
x = 0;
p = 1-r;
k = 0;
g.drawString("Radius = "+r, 20, 20);
g.drawString("p0 = "+p, 20, 40);
g.drawString("(x0, y0) = (0, "+r+")", 20, 60);
for (kolom=0;kolom<=5;kolom++)
{
if(kolom==1)
g.drawString("k", 20, 80);
if(kolom==2)
g.drawString("Pk", 50, 80);
if(kolom==3)
g.drawString("X(k+1), Y(k+1)", 80, 80);
if(kolom==4)
g.drawString("2(X(k+1))", 170, 80);
if(kolom==5)
g.drawString("2(X(k+1))", 235, 80);
}
int pembaris;
pembaris = 0;
for (baris=0; baris<=1; baris++){
baris--;
int pa = p;
int oldx = x;
int oldy = r;
if (p<0){
x++;
p = p+2*x+1;
}
else{
x++;
r--;
p = p+2*x+1-2*r;
}

g.drawString(""+k, 20, 100+(20*pembaris));


g.drawString(""+pa, 50, 100+(20*pembaris));
g.drawString(""+x+","+r, 80, 100+(20*pembaris));
g.drawString(""+2*x, 170, 100+(20*pembaris));
g.drawString(""+2*r, 235, 100+(20*pembaris));
if (r==x)
baris =1;
putus(g, r, x, oldx, oldy);
g.setColor(Color.black);
pembaris++;
}
}
public void putus(Graphics g, int r, int x, int oldx, int
oldy){

if (r==oldy-1)
g.drawLine(500+(oldx*10), 300-(oldy*10), 500+(x*10-
5), 300-(r*10+5));
else
g.drawLine(500+(oldx*10), 300-(oldy*10), 500+(x*10-
5), 300-(r*10));

if (r==oldy-1)
g.drawLine(500+(oldy*10), 300-(oldx*10),
500+(r*10+5), 300-(x*10-5));
else
g.drawLine(500+(oldy*10), 300-(oldx*10), 500+(r*10),
300-(x*10-5));

if (r==oldy-1)
g.drawLine(500+(-oldx*10), 300-(oldy*10), 500+(-
x*10+5), 300-(r*10+5));
else
g.drawLine(500+(-oldx*10), 300-(oldy*10), 500+(-
x*10+5), 300-(r*10));

if (r==oldy-1)
g.drawLine(500+(-oldy*10), 300-(oldx*10), 500+(-r*10-
5), 300-(x*10-5));
else
g.drawLine(500+(-oldy*10), 300-(oldx*10), 500+(-
r*10), 300-(x*10-5));

if (r==oldy-1)
g.drawLine(500+(oldx*10), 300-(-oldy*10), 500+(x*10-
5), 300-(-r*10-5));
else
g.drawLine(500+(oldx*10), 300-(-oldy*10), 500+(x*10-
5), 300-(-r*10));

if (r==oldy-1)
g.drawLine(500+(oldy*10), 300-(-oldx*10),
500+(r*10+5), 300-(-x*10+5));
else
g.drawLine(500+(oldy*10), 300-(-oldx*10), 500+(r*10),
300-(-x*10+5));

if (r==oldy-1)
g.drawLine(500+(-oldx*10), 300-(-oldy*10), 500+(-
x*10+5), 300-(-r*10-5));
else
g.drawLine(500+(-oldx*10), 300-(-oldy*10), 500+(-
x*10+5), 300-(-r*10));

if (r==oldy-1)
g.drawLine(500+(-oldy*10), 300-(-oldx*10), 500+(-
r*10-5), 300-(-x*10+5));
else
g.drawLine(500+(-oldy*10), 300-(-oldx*10), 500+(-
r*10), 300-(-x*10+5));
}
public void sempurna(Graphics g, int r, int x, int oldx,
int oldy){
g.setColor(Color.green);
g.drawLine(500+(oldx*10), 300-(oldy*10), 500+(x*10),
300-(r*10));
g.drawLine(500+(oldy*10), 300-(oldx*10), 500+(r*10),
300-(x*10));
g.drawLine(500+(-oldx*10), 300-(oldy*10), 500+(-
x*10), 300-(r*10));
g.drawLine(500+(-oldy*10), 300-(oldx*10), 500+(-
r*10), 300-(x*10));
g.drawLine(500+(oldx*10), 300-(-oldy*10), 500+(x*10),
300-(-r*10));
g.drawLine(500+(oldy*10), 300-(-oldx*10), 500+(r*10),
300-(-x*10));
g.drawLine(500+(-oldx*10), 300-(-oldy*10), 500+(-
x*10), 300-(-r*10));
g.drawLine(500+(-oldy*10), 300-(-oldx*10), 500+(-
r*10), 300-(-x*10));
}
}

b. Screenshoot

7. Kesulitan membuat lingkaran ber fill merah dan ber outline hijau, yaitu dalam membuat
coding nya harus memisahkan pengerjaan membuat fill dan membuat outline.

8. Modifikasi dapat dilakukan dengan mengubah warna fill.

You might also like