Tugas Algoritma Output Primitif
Tugas Algoritma Output Primitif
DISUSUN OLEH:
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;
@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;
@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());
}
frame.setSize(800,700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Test");
}
}
b. Screenshoot
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;
@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;
}
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.