Modul 2
Kurva
I.
Tugas Pendahuluan
1. Apa perbedaan antara GL_LINES, GL_LINE_STRIP, dan GL_LINE_LOOP?
2. Gambarkan dengan tangan grafik persamaan y = 2x + 1 !
3. Gambarkan dengan tangan grafik persamaan y = (x-1)(x-2) !
4. Gambarkan dengan tangan grafik persamaan y = 2sin(2x) !
II.
Pengantar
Menurut
Wikipedia, kurva adalah garis yang tidak harus lurus.
Contoh kurva: lintasan parabola, grafik sinus, grafik persamaan logaritma, dll.
Menurut definisi ini, garis lurus dapat disebut juga sebagai kurva jenis
khusus.
Mendefinisikan Kurva Menggunakan
Persamaan Polynomial
Polynomial adalah persamaan matematika dalam bentuk:
Dimana a0, a1, a2, … aL
adalah koefisien/konstanta.
Derajat sebuah persamaan polynomial ditentukan dari pangkat
tertinggi dari variabel x.
Kurva Polynomial derajat 1
Persamaan polynomial derajat 1 disebut juga sebagai persaman linear.
Jika digambar, persamaan linear menghasilkan garis lurus.
Sebagai contoh, sebuah kurva yang memiliki representasi parametrik
P(t) = a0 + a1t adalah sebuah garis lurus yang melewati
titik a0 pada waktu t = 0, dan melewati titik a0 + a1
pada waktu t = 1. Dalam dunia 2 dimensi, P(t) terdiri dari dua persamaan: satu
persamaan untuk sumbu x: x(t), dan satu persamaan untuk sumbu y: y(t). Dalam
dunia 3 dimensi P(t) memiliki pula z(t).
Berikut adalah program untuk memplot persamaan linear P(t) dimana: x(t)
= -1 + 2t; y(t) = 0.
void display(void)
{
/* bersihkan
layar */
glClear
(GL_COLOR_BUFFER_BIT);
glColor3f (1.0,
1.0, 0.0);
float t = 0.0;
glBegin(GL_POINTS);
for(t = -1.0;
t<=1.0; t+=0.01){
/* x(t) = -1
+ 2t; y(t) = 0 */
glVertex3f
(-1.0 + 2.0*t, 0.0, 0.0);
}
glEnd();
glFlush ();
}
void kunci(unsigned
char key, int x, int y)
{
switch (key)
{
/* aplikasi
berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Primitif");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return 0;
}
|
Program 2.1 Memplot
persamaan linear
Program diatas akan menaruh titik-titik disepanjang persamaan P(t)
dengan interval 0.01.
Kurva Polynomial derajat 2
Persamaan polynomial derajat 2 disebut juga persamaan kuadrat.
Persamaan kuadrat menghasilkan grafik parabola.
Berikut adalah program yang menggambar x(t) = -1 + 2t; y(t) = t2
– 0.5 atau y = x2 – 0.5
pada interval -1.0 sampai 1.0.
void display(void)
{
/* bersihkan
layar */
glClear
(GL_COLOR_BUFFER_BIT);
glColor3f (1.0,
1.0, 0.0);
float t = 0.0;
glBegin(GL_POINTS);
for(t = -1.0;
t<=1.0; t+=0.01){
/* x(t) = -1
+ 2t; y(t) = 0 */
glVertex3f
(t, -0.5+t*t, 0.0);
}
glEnd();
glFlush ();
}
void kunci(unsigned
char key, int x, int y)
{
switch (key)
{
/* aplikasi
berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Primitif");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return 0;
}
|
Program 2.2 Menggambar
persamaan kuadrat
Program diatas akan menampilkan kurva parabola sesuai persamaan y =
x2 – 0.5 pada interval -1.0 sampai 1.0.
Kurva Polynomial derajat 3
atau lebih
Persamaan polynomial derajat 3 atau lebih memiliki sifat dan
implementasi yang mirip seperti persamaan polynomial derajat2, hanya saja
grafiknya lebih kompleks.
Berikut adalah program yang menggambar y = (x+4)(x+1)(x-1)(x-3)/14 +
0.5
void myinit()
{
glClearColor(0.0,
0.0, 0.0, 1.0);
glColor3f(1.0,
0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10.0,
10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}
void display(void)
{
/* bersihkan
layar */
glClear
(GL_COLOR_BUFFER_BIT);
glColor3f (1.0,
1.0, 0.0);
float t = 0.0;
//f(x) = 1/14
(x+4)(x+1)(x-1)(x-3) + 0.5
glBegin(GL_POINTS);
for(t = -10.0;
t<=10.0; t+=0.1){
glVertex3f
(t, (t+4)*(t+1)*(t-1)*(t-3)/14 + 0.5, 0.0);
}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}
void kunci(unsigned
char key, int x, int y)
{
switch (key)
{
/* aplikasi
berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Primitif");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
myinit();
glutMainLoop();
return 0;
}
|
Program 2.3 Menggambar
persamaan polynomial derajat 4
Program diatas akan menampilkan kurva polynomial derajat 4 sesuai
persamaan y = 1/14 (x+4)(x+1)(x-1)(x-3) + 0.5 pada interval -10.0 sampai 10.0.
Kurva Trigonometri
Kurva trigonometri adalah kurva yang dihasilkan dari fungsi-fungsi
trigonometri: sinus, cosinus, dan tangen.
Berikut adalah program yang menggambar grafik fungsi sinus.
//Supaya bisa menggunakan fungsi sin(), program perlu
include Math.h
#include <Math.h>
void myinit()
{
glClearColor(0.0,
0.0, 0.0, 1.0);
glColor3f(1.0,
0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0,
10.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
}
void display(void)
{
/* bersihkan
layar */
glClear
(GL_COLOR_BUFFER_BIT);
glColor3f (1.0,
1.0, 0.0);
float x = 0.0;
glBegin(GL_POINTS);
//perhitungan
sudut di openGL menggunakan radian, bukan derajat
for(x=0.0;
x<=6.28; x+=0.1)
{
glVertex2f(x,sin(x));
}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}
void kunci(unsigned
char key, int x, int y)
{
switch (key)
{
/* aplikasi
berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Primitif");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
myinit();
glutMainLoop();
return 0;
}
|
Program 2.4 Menggambar
fungsi sinus.
III. Percobaan
Berikut adalah yang harus dilakukan selama sesi lab:
1.
Copy contoh-contoh program
diatas, jalankan, dan amati output yang ditampilkan.
2.
Ubah program 2.1, 2.2, 2.3, dan
2.4 dari GL_POINTS untuk menggambar kurva menjadi GL_LINES, GL_LINE_STRIP, dan
GL_LINE_LOOP!
Amati perubahan tampilan yang terjadi. Mana yang
menurutmu sebaiknya digunakan dan sebaiknya dihindari dalam menggambar kurva?
3.
Modifikasi program 2.4 dari
fungsi sinus menjadi fungsi tangen.
Selain menggunakan fungsi tangen di header file Math.h,
coba gunakan juga formula tg() = sin()/cos().
IV. Tugas
Selesaikan pertanyaan-pertanyaan berikut ini:
1.
Ubah persamaan linear pada
program 2.1 menjadi x(t): 0.5 - t; y(t) = 1 + 2t.
2.
Ubah program 2.2 supaya bisa menampilkan
plot seperti berikut:
Gambar
yang dihasilkan tidak harus persis sama, tetapi harus dibuat semirip mungkin.
Jangan gunakan teknik transformasi (modul 3), gunakan pendekatan persamaan
matematis untuk menghasilkan gambar tersebut.
3.
Modifikasi program 2.3 untuk
menampilkan fungsi berikut: f(x) = (x-3)(x-3)(x-1)(x)(x+2)(x+2)(x+3) / 14.
Sesuaikan ukuran proyeksi supaya kurva dapat terlihat
jelas di dalam jendela program.
4.
Fungsi Cosinus memiliki bentuk
baku sebagai berikut:
y = A Cos(Bx + C) + D
dimana:
- A menentukan tinggi rendahnya grafik yang dihasilkan
pada sumbu y
- B menentukan berapa kali perulangan grafik dalam satu
interval
- C menentukan pergeseran sudut inputan sinus
- D menentukan pegeseran grafik sinus pada sumbu y.
Modifikasi program 2.4 supaya bisa mengakomodasi bentuk
baku ini. Hint: buat variabel untuk A, B, C, dan D.
Program tidak perlu mempunyai fasilitas menerima inputan
ketika dijalankan.
Sebagai contoh, berikut ini adalah gambar grafik cosinus
dengan A = 3, B = 4, C = 0.5, D = 2.