Tải bản đầy đủ (.pptx) (22 trang)

báo cáo môn đồ họa máy tính đề tài con lắc đơn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (220.57 KB, 22 trang )

ĐẠI HỌC CÔNG NGHIỆP VINH
KHOA CÔNG NGHỆ
NGÀNH CÔNG NGHỆ THÔNG TIN
Bộ môn: ĐỒ HỌA MÁY TÍNH
Đề tài: Mô phỏng dao động con lắc đơn
Sv:Trần Xuân Sang
Sv: Phan Thế Đạt
Sv: Hồ Tuấn Anh
Gvhd: Phan Thị Hiền


I.Giới thiệu Opengl

II.Giới thiệu đề tài

Nội dung

III. Demo

IV. Kết luận


GiỚI THIỆU VỀ OPENGL



OpenGL (tếng Anh Open Graphics Library) là một têu chuẩn kỹ thuật đồ họa có
mục đích định ra một giao diện lập trình ứng dụng ( API) đồ họa 3 chiều.
OpenGL cũng có thể được dùng trong các ứng dụng đồ họa 2 chiều. Giao diện
lập trình này chứa khoảng 250 hàm để vẽ các cảnh phức tạp từ những hàm đơn
giản. Nó được dùng rộng rãi trong các trò chơi điện tử. Ngoài ra nó còn dùng


trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông
tn, phát triển trò chơi


GIỚI THIỆU ĐỀ TÀI




Mô phỏng hoạt động con lắc đơn
Click chuột để
con lắc đơn
hoạt động.


GIỚI THIỆU ĐỀ TÀI



Nền tảng phát triển


Giải quyết bài toán


Giải quyết bài toán

– Ý TƯỞNG
• Sử dung DrawCircle Vẽ 2 hình tròn







Sử dụng LINE để vẽ sợi dây nối
Dùng hàm if để giới hạn vị trí lắc
Sử dụng hàm glTranstale để lắc
Sử dụng hàm mouse để thao tác chuột


Giải quyết bài toán




Cài đặt opengl vào Visual c++
Tham chiếu thư viện Opengl
#include<math.h> #include<iostream>
#include<glut.h>


Giải quyết bài toán



Khai báo biến toàn cục
float tdl=0.1;
float A=135;



Giải quyết bài toán
- Hàm DrawCIrcle để vẽ hình tròn















float drawCircle(float segments,float radius,float sx,float sy)
{
glBegin(GL_LINE_LOOP);
for(int i=0;i{
float theta=2.0*3.142*float(i)/float(segments); //get the current A
float x=radius*cos(theta);
float y=radius*sin(theta);
glVertex2f(x+sx,y+sy);
}
glEnd();
return 0;

}


Giải quyết bài toán



Gọi hàm Draw để vẽ các thành phần của con lắc đơn:
void draw(float x1,float y1,float A)
float segments=150;
float radius=6.0;
glLineWidth(3);
glColor3f(1,1,0);//màu vàng

drawCircle(segments,radius,x1,y1);
Vẽ hình tròn gốc


Giải quyết bài toán
Vẽ đường nối 2 đường tròn
glColor3f(0,0,1);//màu xanh
glBegin(GL_LINES);
glVertex2f(x1,-1*(radius)+0.2);
glVertex2f(x2,y2);
glEnd();


Giải quyết bài toán




Vẽ hình tròn tượng trưng quả lắc
glColor3f(0,1,1);//màu xanh nhạt
drawCircle(segments,radius2,x2,y2);


Giải quyết bài toán


Hàm hiển thị



void display()



{



glClearColor(0,0,0,1);



glClear(GL_COLOR_BUFFER_BIT);



glLoadIdentty();




glTranslatef(-5,15,-30);



glColor3f(1,1,1);


Giải quyết bài toán















Giới hạn lặp




}

if(A>310)
{
A=310;
tdl=-tdl;
}
if(A<210)
{
A=210;
tdl=-tdl;
}
A += tdl;
draw(0,0,A);
glutSwapBuffers();


Giải quyết bài toán



Hàm định dạng thao tác chuột
void glutMouseFunc(int button, int state, int x, int y)
{
if(button==GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
glutIdleFunc(display);
}
}


Nhấp chuột phải con lăc sẽ lắc đều


Giải quyết bài toán










Cuối cùng là main chương trình
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(800,600);
glutInitWindowPositon(0,0);
glutCreateWindow("con lac don");







glutDisplayFunc(display);

glutMouseFunc(glutMouseFunc);

glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}


DEMO


KẾT LUẬN


THANKS FOR WATCHING





×