Program C++ | Membuat Guci Animasi



Ilmu Komputer dan Teknologi - Sepertinya hari semakin bertambah, tidak terasa sudah lama belum tambah artikel di blog ini, terasa membuat diri merindu.

Kali ini Ilmu Komputer Dan Teknologi akan membahas pembuatan sebuah animasi dari Pemrograman C++. Sebelumnya dalam artikel yang lainnya saya sudah menampilkan beberapa postingan artikel tentang grafika komputer.

Seperti :
  1. Pengenalan Grafika
  2. Membuat Jam Analog
  3. Membuat Diagram Batang
Jadi, kali ini saya akan menampilkan bagaimana cara membuat guci animasi memakai program dev C++

Screen Shotnya seperti ini, dalam 1 titik sumbu akan membentuk 1 gunci penuh


Coding nya ini :
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>

typedef struct
{
int x;
int y;
}point2d;

typedef struct
{
int x;
int y;
int z;
}point3d;

point3d P3[4],P3R[4];
point2d P2[4],P2temp[4];

void pointData(){

P3[0].x=70; P3[0].y=110; P3[0].z=0; //menentukan koordinat titik-titik kontrol
P3[1].x=50; P3[1].y=75; P3[1].z=0;
P3[2].x=-10; P3[2].y=60; P3[2].z=0;
P3[3].x=200; P3[3].y=0; P3[3].z=0;
P3[4].x=60; P3[4].y=-180; P3[4].z=0;
}

void simpanTemp(int x, int y, int urutan){

P2temp[urutan].x = x;
P2temp[urutan].y = y;

}

void konversi_systoscreen(point2d *p)
{
int midx, midy;
midx = getmaxx()/2 + 1;
midy = getmaxy()/2 + 1;

p->x = midx + p->x;
p->y = midy - p->y;
}

point2d konversi_p3d_to_p2d(point3d p)
{
point2d temp;
temp.x = p.x;
temp.y = p.y;
//p.z tidak ikut
return(temp);
}

point3d rotasi_X(point3d p, int sudut)
{
float rad = 3.14 / 180;
point3d temp;
temp.x = p.x;
temp.y = (p.y * cos(sudut*rad) - p.z * sin(sudut*rad));
temp.z = (p.y * sin(sudut*rad) + p.z * cos(sudut*rad));
return(temp);
}

point3d rotasi_Y(point3d p, int sudut)
{
float rad = 3.14 / 180;
point3d temp;
temp.x = (p.x * cos(sudut*rad) - p.z * sin(sudut*rad));
temp.y = p.y;
temp.z = (p.x * sin(sudut*rad) + p.z * cos(sudut*rad));
return(temp);
}


long int faktor(int n) // fungsi faktorial
{ int i;
long int hsl = 1;
for(i=n; i>1; i--)
{
hsl = hsl * i;
}
return(hsl);
}

long int combinasi(int n, int k) // fungsi combinasi
{
long int comb, nf, kf,nkf;
nf = faktor(n);
kf = faktor(k);
nkf = faktor(n-k);
comb = nf /(kf * nkf);
return(comb);
}

void gambarKurva(int sudut)
{

float u, x, y, h;
int i, n, k, l=1;

setcolor(GREEN);
circle(P2[0].x, P2[0].y, 5); //menggambar titik kontrol P0

circle(P2[4].x, P2[4].y, 5); //menggambar titik kontrol P2

x = 0; // nilai awal titik kurva berikutnya
y = 0;
n = 5-1; //(n = jumlah titik kontrol - 1 sebab hitungan dimulai dari 0;
u = 0.00;
for(i=0; i<=200; i++) // u bergerak dari 0 .. 1 step 0.05 ( e[0,1] )
{
for(k=0; k<=n; k++) //Sigma, mengulang sebanyak titk kontrol
{
h = combinasi(n, k) * pow(u, k) * pow(1-u, n-k); // fungsi blending

x = x + P2[k].x * h; //hitung koordinat titik kurva berikutnya untuk x
y = y + P2[k].y * h; //hitung koordinat titik kurva berikutnya untuk y

}
setcolor(GREEN);
putpixel( x, y, l); //menggambar titik kurva

u = u + 0.005; // step
x=0.0; // x dan y di nol kan untuk akumulasi titik kurva berikutnya
y=0.0;
}

int midx, midy;
midx = getmaxx()/2 + 1;
midy = getmaxy()/2 + 1;
line(P2[4].x,P2[4].y,midx+0,P2[4].y);
for(i=0; i<=10; i++){
simpanTemp(P2[i].x, P2[i].y, i);
}

}


void prosesRotasi(int sudut){
int i;

//Rotasi pada sumbu Y sebesR SUDUT 10 derajat
for(i=0; i<=10; i++)
{
P3R[i] = rotasi_Y(P3[i], sudut );
}

//Rotasi pada sumbu X sebesR SUDUT 10 derajat
for(i=0; i<=10; i++)
{
P3R[i] = rotasi_X(P3R[i], 20 );
}

//konversi p3d ke p2d
for(i=0; i<=10; i++)
{
P2[i] = konversi_p3d_to_p2d(P3R[i]);
}

//konversi koordinat system to screen
for(i=0; i<=10; i++)
{
konversi_systoscreen(&P2[i]);
}



}
int main(){
int midx, midy, input, putar_x=0, putar_y=0;
initwindow(1000, 700, "Kurva Beizer");
setcolor(YELLOW);
outtextxy(400,40,"*************************************************");
setcolor(WHITE);
outtextxy(450,60,"ILMU KOMPUTER DAN TEKNOLOGI");
outtextxy(450,80,"http://adie-konoe.blogspot.com");
setcolor(YELLOW);
outtextxy(400,100,"************************************************");

setcolor(WHITE);
int i=0;
do{
pointData();
prosesRotasi(i);
gambarKurva(i);
i+=5;
delay(100);
}while(i!=360);
getch();
}
Program ini boleh di sebar luaskan tapi ingat letakkan referensinya dan sourcenya
Semoga artikel ini bermanfaat

Read more: http://adie-konoe.blogspot.com/2011/12/program-c-membuat-guci-animasi.html#ixzz28mYq1WXw

3komentar:

  1. Bang, Itu pake windows aplication apa Consol aplication ?

    BalasHapus
  2. Kak boleh minta pinnya atau WA mau konsul tanya2 tentang animasi c++ nh

    BalasHapus
  3. Errornya banyak.#include dll
    Tolong d perbaiki

    BalasHapus