NRP : 2210141041
DOSEN : Moch Mobed Bachtiar
TANGGAL : 3 April 2017
Obyek Grafik 2D
I. Tujuan
Mahasiswa dapat menggambar objek dan mentransformasikan objek tersebut.
Mahasiswa bisa membuat objek bergerak
2. Fungsi point2vector
Fungsi ini digunakan untuk memindahkan tipe data titik menjadi tipe data
vektor. Hal ini sangat berguna untuk operasional matrik yang digunakan dalam
melakukan transformasi dan pengolahan matrik pada grafika komputer.
3. Fungsi vector2point
Fungsi ini digunakan untuk memindahkan tipe data vektor menjadi tipe data titik.
Hal ini sangat berguna untuk penyajian grafis setelah proses pengolahan matrik yang
dikenakan pada obyek 2D.
IV. Hasil
Tugas 1 : Menggambar Orbit Bumi dan bulan saat mengelilingi Matahari
Tugas 2 : Menggambar Sinyal Osiloskop
#include <glut.h>
#include <math.h>
typedef struct {
float x;
float y;
} point2D_t;
typedef struct {
float r;
float g;
float b;
} color_t;
typedef struct {
float v[3];
} vector2D_t;
typedef struct {
float m[3][3];
} matrix2D_t;
matrix2D_t createIdentity(void) {
matrix2D_t u;
int i, j;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++) u.m[i][j]=0;
u.m[i][i]=1.;
}
return u;
}
matrix2D_t operator*(matrix2D_t a, matrix2D_t b) {
matrix2D_t c; // c=a*b
int i, j, k;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
c.m[i][j]=0;
for (int k= 0; k < 3; k++) {
c.m[i][j]+=a.m[i][k]*b.m[k][j];
}
}
}
return c;
}
void drawEllipse (point2D_t p[], float r1, float r2, int n){
float a=6.28/n;
for (int i = 0; i < n; i++)
{
p[i].x=r1*(float)cos((float)i*a);
p[i].y=r2*(float)sin((float)i*a);
}
drawPolygon(p,n);
}
void userdraw(){
static float tick, tick1, tick2;
matrix2D_t mat, mat1, mat2;
color_t war={0,0,1};
color_t war1={0,1,1};
tick+=0.01;
tick1+=0.001;
tick2+=0.001;
}
void putarbulan(){
static float tick, tick1, tick2;
matrix2D_t mat, mat1, mat2;
color_t war={0,0,1};
color_t war1={0,1,1};
void sinyal() {
static int a=0;
point2D_t p[360];
for(int i=0;i<360;i++){
float s=(i+a)/57.3;
p[i].x=i;
p[i].y=sin(16*s)*(1+0.5*sin(2*s));
}
setColor(1,1,1);
drawPolyline(p,360);
a++;
}
void Display(){
glClear(GL_COLOR_BUFFER_BIT);
//userdraw();
//putarbulan();
sinyal();
glutSwapBuffers();
}
V. ANALISA
Dari percobaan yang telah dilakukan, diketahui bahwa untuk membuat sebuah
gambar yang bergerak, digunakan fungsi tick. Kemudian, jika kita ingin membuat
gambar tersebut berputar dapat menggunakan fungsi transformasi seperti pada
contoh diatas. Selain itu, terdapat fungsi baru yang digunakan pada praktikum ini,
antara lain matrix2d, vector2d. dari fungsi matrix dan vector maka dapat dibentuk
sebuah tranformasi 2D.
Untuk membuat sebuah sinyal sinus, rumus fungsi utamanya yaitu
p[i].y=sin(16*s)*(1+0.5*sin(2*s));
Ortho pada pembentukan orbit berbeda dengan sinyal sinus. Pada sinyal sinus,
menggunakan ortho gluOrtho2D (0,360,-2,2);
VI. KESIMPULAN
Dari percobaan yang telah dilakukan dapat disimpulkan bahwa :
Untuk membuat transformasi2D , digunakan fungsi matrix dan vector
Untuk membuat sebuah sinyal sinus, rumus fungsinya yaitu
p[i].y=sin(16*s)*(1+0.5*sin(2*s));