AGENDA
Tutorials - OpenCV
Latihan 8 : Animasi Memantulkan Bola

Pada program ini akan membuat Animasi Memantulkan Bola.



Animasi Memantulkan Bola

Berikut adalah langkah-langkah yang dibutuhkan untuk membuat animasi memantulkan bola. Dalam program ini, bola akan memantul jika mengenai dinding jendela tampilan dan user dapat mengatur besar dan kecepatan gerak bola menggunakan arrow key pada keyboard.

1)Pertama-tama buka aplikasi Microsoft Visual  Studio 2012  yang sudah terintall sebelumnya. Kemudian buatlah New Project dengan cara : pilih file » New » New Project, seperti gambar berikut :

2) Lalu akan muncul jendela New Project pilihlah » Visual C++ » Win32 Console Application kemudian beri nama project.

3) Kemudian akan muncul jendela Win32 Application Wizard – animasiMemantulkanBola » Klik Next.

4) Lalu pilihlah Console Application dan cheklistlah Empty Project » Klik Finish

5) Lalu akan muncul jendela animasiMemantulkanBola - Microsoft Visual Studio lalu klik kanan pada nama project yang anda buat, pilihlah Add » New Item.

 

6) Kemudian akan muncul jendela Add New Item – animasiMemantulkanBola,pilihlah Visual C++ » C++ File (.cpp) » beri nama “animasiMemantulkanBola” » tentukan lokasi penyimpanan »klik Add.

7) Kemudian lakukan konfigurasi openCV pada Microsoft Visual Studio 2012. Langkah-langkah untuk melakukan konfigurasi pada Microsoft Visual Studio dapat dilihat pada bahasan sebelumnya.

8) Setelah itu masukan Codding berikut ini :

// Nama Program	: animasiMemantulkanBola.cpp
// Tanggal		: Februari 2015
// Deskripsi		: Animasi Memantulkan Gambar

#include "iostream"			
#include "opencv2/opencv.hpp"		
#include "opencv2/opencv_modules.hpp"	
#define width 700			
#define height 500			
#define gap 50							
#define KEYUP 2490368					
#define KEYDOWN 2621440					
#define KEYRIGHT 2555904				
#define KEYLEFT 2424832	
				
using namespace cv;						 
using namespace std;					
Point target;							
Mat atom_image;							

void MyFilledCircle( Mat img, Point center, int radius ) 
{ 
    int thickness = -1; 
    int lineType = 8; 
    circle( img, center, radius, Scalar( 255, 0, 255 ),
    thickness,lineType ); 
}

int main() 
{ 
    int radius = 15;										
    atom_image = Mat::zeros(height, width, CV_8UC3);		
    target = Point(width/2, height/2);					
    MyFilledCircle( atom_image, target, radius);		
    imshow("Bouncing Ball", atom_image );					
	cout << "Controls:" << endl;
	cout << "Key Up : Increase speed" << endl;
	cout << "Key Down : Decrease speed" << endl;
	cout << "Key Left : Decrease size" << endl;
	cout << "Key Right : Increase size" << endl;

    int keyBoardInput; //input keyboard oleh user 
    int speed_x = 5; //kecepatan awal pada x-axis 
    int speed_y = 5; //kecepatan awal pada y-axis
    do { 

         keyBoardInput = cvWaitKey(50);
         switch(keyBoardInput) {

case KEYUP:
	if (speed_x > 0) 
	    speed_x++; 
	else if (speed_x < 0) 
	   speed_x--;

	if (speed_y > 0) 
	    speed_y++;
 
	else if (speed_y < 0) 
	    speed_y--;

	cout << "Speed: " << 
       (speed_x > 0 ? speed_x : -speed_x) << endl; 
	break; 

case KEYDOWN: 
	if (speed_x > 1) 
	    speed_x--; 
	else if (speed_x < -1) 
	    speed_x++;

	if (speed_y > 1) 
	    speed_y--; 
	else if (speed_y < -1) 
	    speed_y++;

	if (speed_x == 1 || speed_x == -1)
 //pada kecepatan minimal
	cout << "Already in minimal speed!" << endl; 
	else cout << "Speed: " << 
       (speed_x > 0 ? speed_x : -speed_x) << endl; 
	break;

case KEYRIGHT:
{
	int max_radius = (width < height ? width : height) / 2 - gap; 
	if (radius < max_radius && 
       (target.x > radius+2 && target.x 
       < width-radius-2) && (target.y > radius+2 ||  
       target.y < height-radius-2) )
	{ 

	radius ++; 
	cout << "Radius of circle: " << radius << "px\n"; 

	} 
	else if (radius == max_radius) 
	cout << "Already in maximal radius!" << endl; 
	else 
	cout << "Cannot do it now" << endl; 
	break; 
}	

case KEYLEFT:
if (radius > 1)
	{ 
	radius--; 
	cout << "Radius of circle: " << radius << "px\n"; 
	} 
	else 
	cout << "Already in minimal radius!" << endl; 
	break; 
}
if (target.x < radius || target.x > width-radius) 
	speed_x = -speed_x; 
if (target.y < radius || target.y > height-radius) 
	speed_y = -speed_y; 

	target.x += speed_x; 
	target.y += speed_y; 
	atom_image = Mat::zeros(height, width, CV_8UC3); 
	MyFilledCircle( atom_image, target, radius); 
	imshow("Bouncing Ball", atom_image ); 
} 
	
	while(true);
	return 0; 
}

9) Kemudian apabila telah selesai, Tekan F5 untuk menjalankan program tersebut. Hasilnya adalah seperti gambar berikut :

Like or Share This Article



COMMENTS ( 0 )
 
Keep connected with us, mobile apps available now !!