Breaking News
Loading...
Wednesday, 14 May 2014

Kurva (Curve) di OpenGL dengan Glut

02:23

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.
 

Comments
0 Comments

0 comments:

Post a Comment

 
Toggle Footer