Anda di halaman 1dari 5

Nama : Sandra Budi Garnisa

NPM : 1806039

Algoritma Pembentuk Lingkaran

Titik Pusat = (0,0)


Radius (r) = 10
Karena (x0, y0) = (0,r), Maka titik awal berada di (0, 10)

K=0
P0 = 1 – r = 1 – 10 = -9
Pk < 0, -9 < 0
Maka titik selanjutnya adalah (xk+1, yk) = (1, 10)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1
= -9 + 2(1) + 1 = -6

K=1
P1 = -6
Pk < 0, -6 < 0
Maka titik selanjutnya adalah (xk+1, yk) = (2, 10)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1
= -6 + 2(2) + 1 = -1

K=2
P2 = -1
Pk < 0, -1 < 0
Maka titik selanjutnya adalah (xk+1, yk) = (3, 10)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1
= -1 + 2(3) + 1 = 6

K=3
P3 = 6
Pk > 0, 6 > 0
Maka titik selanjutnya adalah (xk+1, yk-1) = (4, 9)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1 – 2yk+1
= Pk + (2xk + 2) + 1 – (2yk – 2)
= 6 + (2(3) + 2) + 1 – (2(10) - 2)
= 15 – 18 = -3

K=4
P4 = -1
Pk < 0, -3 < 0
Maka titik selanjutnya adalah (xk+1, yk) = (5, 9)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1
= -3 + 2(5) + 1 = 8

K=5
P5 = 8
Pk > 0, 8 > 0
Maka titik selanjutnya adalah (xk+1, yk-1) = (6, 8)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1 – 2yk+1
= Pk + (2xk + 2) + 1 – (2yk – 2)
= 8 + (2(5) + 2) + 1 – (2(9) - 2)
= 21 – 16 = 5

K=6
P6 = 5
Pk > 0, 5 > 0
Maka titik selanjutnya adalah (xk+1, yk-1) = (7, 7)
Parameter selanjutnya Pk+1 = Pk + 2xk+1 + 1 – 2yk+1
= Pk + (2xk + 2) + 1 – (2yk – 2)
= 8 + (2(6) + 2) + 1 – (2(8) - 2)
= 23 – 14 = 9

k pk (xk+1, yk+1) 2 xk+1 2 yk+1


0 -9 (1,10) 2 20
1 -6 (2,10) 4 20
2 -1 (3,10) 6 20
3 6 (4,9) 8 18
4 -3 (5,9) 10 18
5 8 (6,8) 12 16
6 5 (7,7) 14 14

Sumber : http://juliusagunggunawan.blogspot.com/2014/10/algoritma-lingkaran.html

Source code:
/// Algoritma pembuat lingkaran

#include <GL\glut.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

///identifier fungsi
void init();
void display(void);
void lingkaran(void);

/// posisi window di layar


int window_x;
int window_y;

int xcIn,xc,ycIn,yc,rIn,r;

/// ukuran window


int window_width = 480;
int window_height = 480;

/// judul window


char *judul_window = "Algoritma Pembuat Lingkaran";

int main(int argc, char **argv)


{
ulangi:cout<<"Masukkan nilai Jari2(r) : ";cin>>rIn;
if(rIn<=0){
cout<<"\nCaution . . . !\nNilai R harus R > 0\n";
goto ulangi;
}
awal:cout<<"\nMasukkan nilai Xc : ";cin>>xcIn;
cout<<"Masukkan nilai Yc : ";cin>>ycIn;
if((xcIn >= rIn) && (ycIn >= rIn)){
r = rIn;
xc = xcIn;
yc = ycIn;
}else{
cout<<"\nCaution . . . !\nNilai harus Xc > r dan Yc > r\n";
goto awal;
}
cout<<endl;

/// inisialisasi GLUT (OpenGL Utility Toolkit)


glutInit(&argc, argv);

/// set posisi window supaya berada di tengah


window_x = (glutGet(GLUT_SCREEN_WIDTH) - window_width) / 2;
window_y = (glutGet(GLUT_SCREEN_HEIGHT) - window_height) / 2;
glutInitWindowSize(window_width, window_height); ///set ukuran window
glutInitWindowPosition(window_x, window_y); ///set posisi window

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); /// set display RGB dan


double buffer
glutCreateWindow(judul_window);

init(); /// jalankan fungsi init


glutDisplayFunc(display); /// set fungsi display
glutMainLoop(); /// set loop pemrosesan GLUT
}

void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0); ///set warna background
glColor3f(1.0, 1.0, 1.0); ///set warna titik
glPointSize(3.0); ///set ukuran titik
glMatrixMode(GL_PROJECTION); ///set mode matriks yang digunakan
glLoadIdentity(); /// load matriks identitas
gluOrtho2D(0.0, 600.0, 0.0, 600.0); /// set ukuran viewing window
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); ///clear color
lingkaran(); ///jalankan fungsi lingkaran
glutSwapBuffers(); ///swap buffer
}

void lingkaran(void) {
///tentukan titik pusat dan jari-jari

///hitung p awal dan set nilai awal untuk x dan y


int p = 1-r;
int x = 0;
int y = r;

glBegin(GL_POINTS);

glVertex2i(xc,yc);///Gamabar titik ditengah

///perulangan untuk menggambar titik


while (x <= y) {
if (p < 0) {
p += 2 * x + 1; ///hitung p selanjutnya jika p < 0
}
else {
y--; ///kurangi nilai y
p += 2 * (x - y) + 1; ///hitung p selanjutnya jika p > 0 atau p = 0
}

/// translasi terhadap titik pusat dan cerminkan


glVertex2i(xc + x, yc + y);
glVertex2i(xc - x, yc + y);
glVertex2i(xc + x, yc - y);
glVertex2i(xc - x, yc - y);
glVertex2i(xc + y, yc + x);
glVertex2i(xc - y, yc + x);
glVertex2i(xc + y, yc - x);
glVertex2i(xc - y, yc - x); x+
+; ///tambah nilai x
}

glEnd();
glFlush();
}

Hasil:

Anda mungkin juga menyukai