Tải bản đầy đủ (.docx) (75 trang)

Xây dựng phần mềm hỗ trợ học sinh cấp 3 học khảo sát và vẽ đồ thị hàm số bằng opengl

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 (457.69 KB, 75 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
----------

BÁO CÁO BÀI TẬP LỚN
MÔN ĐỒ HỌA MÁY TÍNH
ĐỀ TÀI: XÂY DỰNG PHẦN MỀM HỖ TRỢ HỌC SINH CẤP 3
HỌC KHẢO SÁT VÀ VẼ ĐỒ THỊ HÀM SỐ BẰNG OPENGL.
Giảng viên hướng dẫn: ThS. Vũ Minh Yến
Nhóm thực hiện: NHÓM 7 – HTTT- K5

Hà Nội ngày 6/8/2012


BÁO CÁO BÀI TẬP LỚN
MÔN ĐỒ HỌA MÁY TÍNH

ĐỀ TÀI: XÂY DỰNG PHẦN MỀM HỖ TRỢ HỌC SINH CẤP 3 HỌC
KHẢO SÁT VÀ VẼ ĐỒ THỊ HÀM SỐ BẰNG OPENGL.

Giảng viên hướng dẫn: ThS. Vũ Minh Yến
Nhóm thực hiện: NHÓM 7 – HTTT- K5

NHÓM 7_H3TK5

Lơi mơ đầu
Trong thơi đại phát triển của ngành công nghệ thông tin ngày nay, việc ứng dụng
công nghệ thông tin và cuốc sống có vai trò vô cùng ý nghĩa góp phần tích cực xây
dựng một xã hội hiện đại, sánh vại với các nước hiện đại trên thế giới .


2
Page 2


Ngành đồ họa máy tính là một lĩnh vực trong công nghẹ thông tin đang được
phát triển một cách mạnh mẽ, trong đó có việc ứng dụng công nghệ vẽ 3D trong
xây dựng các đô thị hiện đại, hướng tới một tương lai hiện đại phát triển.
Không những thế, đồ họa máy tính còn được ứng dụng trong game 3D, một loại
hình giải trí thịnh hành trong thập niên chúng ta. Và ứng dụng này giơ đây cũng
được áp dụng trong việc học tập của học sinh, sinh viên, là một công cụ mạnh mẽ
hỗ trợ cho việc dạy học của thầy cô và học sinh, sinh viên, nâng cao kết quả dạy và
học của thầy và trò.
Nhận đề tà bài tập lớn đồ họa máy tính “ Xây dựng phần mềm hỗ trợ học sinh
cấp 3 học khảo sát và vẽ đồ thị hàm số bằng opengl” nhóm 19_HTTT_k5 chúng
em với 3 thành viên trong nhóm đã tích cực tìm hiểu về opengl. OpenGl là một bộ
phận mới của đồ họa máy tính nhưng tính năng của nó vô cùng mạnh mẽ trong
công việc phác họa và vẽ 3D. Nó được đánh giá cao trong việc lập trình 3D. Qua
thơi gian nghiên cứu và tìm hiểu của các thành viên trong nhóm về đồ họa 3D
opengl, chúng em đã có thể hiểu cơ bản về opengl và có thể lập trình căn bản
opengl trong đề tài của nhóm.
Tuy có tìm hiểu và học hỏi nhưng opengl là một chương trình mới lạ so với
kiến thức đã học trên lớp, có nhiều phần chúng em cũng chưa rõ nên lập trình còn
sơ sài, thiếu sót, mong cô và các bạn đóng góp ý kiến để đề tài trơ nên hoàn chỉnh
và cũng là cơ hội cho các bạn học hỏi, đúc kết thêm kho tàng kiến thức của mình.
Chúng em xin chân thành cảm ơn!!

Nhóm 7_HTTT_K5

NỘI DUNG VÀ YÊU CẦU CỦA ĐỀ TÀI
1. Nội dung

Xây dựng phần mềm hỗ trợ học sinh cấp 3 học khảo sát và vẽ đồ thị hàm
số.
Yêu cầu :

3
Page 3


• Mỗi thành viên phải hiểu và phân tích được toàn bộ đề tài đã làm
của nhóm.
• Ngôn ngữ lập trình được áp dụng : DEV C++
2. Chức năng của phần mềm
Giúp khảo sát 2 hàm cơ bản trong chương trình cấp 3
+ Hàm đa thức bậc 2: y=ax2 + bx2 + c (a#0)
+ Hàm đa thức bậc 3: y=ax3 +bx2 + cx + d (a#0)
+ Hàm đa thức bậc 4( trùng phương): y=ax4 + bx2 + c (a#0)
Ngươi dùng chỉ việc kích chuột phải và chọn loại hàm đa thức
nào( có trong menu) và phần mềm sẽ tự động khảo sát và vẽ bảng biến
thiên và đồ thị hàm số.

Phần 1. Giơi thiệu về OPENGL.
I. Tìm hiểu về Opengl
1.Lịch Sử Phát Triển :
Nguyên thủy, GL do Silicon Graphics Incorporated (SGI) thiết kế để dùng cho
các trạm làm việc (workstation) đồ họa IRIS của họ. IRIS GL với các cấu hình
phần cứng khác thì có vấn đề phát sinh.
OpenGL là kết quả nổ lực của SGI nhằm cải thiện tính tương thích của IRIS
GL. Ngôn ngữ mới này có khả năng của GL, đồng thơi “mơ “ nghĩa là dễ dàng

4

Page 4


tương thích với các lọai cấu hình phần cứng, cũng như các hệ điều hành khác nhau.
Version1.0 của OPENGL được giới thiệu vào ngày 01/7/1992.
Để bảo đảm tính “mơ “, mọi sự nâng cấp OpenGL phải thông qua Ủy Ban
Xem Xét Kiến Trúc OpenGL(OpenGL Architecture Review Board AEB) gồm các
thành viên sáng lập là SGI, Digittal Equipment Corporation, IBM , Intel và
Microsoft.ARB hợp mỗi năm hai lần. Open GL version1.1 được ARB thông qua
vào tháng 12/1995.
2. Opengl là gì?
Được phát triển đầu tiên bơi Silicon Graphic, Inc., là một giao diện phần phần
mềm hướng thủ tục theo chuẩn công nghiệp hộ trợ đồ họa 3 chiều. Cung cấp
khoảng 120 tác vụ để vẽ các primitive trong nhiều mode khác nhau. Với OpenGL,
bạn có thể tạo ra ảnh 3 chiều cả tĩnh và động với chất lượng cao.
Là một giao diện phần mềm độc lập với phần cứng (hardware – independent
software interface) hộ trợ cho lập trình đồ họa. Để làm được điều này, OpenGL
không thực hiện các tác vụ thuộc về hệ điều hành cũng như không nhận dữ liệu
nhập của ngươi dùng (ngươi dùng giao tiếp với OpenGL thông qua OpenGL API).
Nó là lớp trung gian giữa ngươi dùng và phần cứng. Nghĩa là nó giao tiếp trực tiếp
với driver của thiết bị đồ họa.
3. Các hàm cơ bản trong OpenGL
Trong Opengl các hàm được bắt đầu bằng GL nằm trước tên hàm

void glutInit(int *argc, char **argv);

Khơi động GLUT , argc, argv là 2 đối số dòng lệnh của hàm main

void glutInitWindowPosition(int x, int y);


5
Page 5


Khơi tạo vị trí bắt đầu cửa sổ, x là left of the screen, y là top of the screen, nói
chung đây là điểm bên trái, phía trên của cửa sổ, từ đây ta kéo xuống phía dưới,
bên phải là được 1 cửa sổ . Đơn vị của x, y là pixel.

void glutInitWindowSize(int width, int height);
Khơi tạo kích thước cửa sổ. với chiều dài và chiều rộng, cộng thêm 1 điểm bắt
đầu mới nói ơ trên nữa, bạn đã tương tượng ra đc 1 cái cửa sổ chưa

void glutInitDisplayMode(unsigned int mode)
Định nghĩa mode hiển thị, chỉ ra màu của mode và số + kiểu của buffer
+ GLUT_RGBA or GLUT_RGB : cửa sổ màu RGBA, đây là mode mặc định
+ GLUT_SINGLE : cửa sổ buffer đơn
+ GLUT_DOUBLE : cửa sổ buffer đôi
+ GLUT_DEPTH : cửa sổ buffer sâu

int glutCreateWindow(char *title);
Tạo cửa sổ có tiêu đề title

void glutDisplayFunc(void (*func)(void));
Hàm này báo cho GLUT biết phải trình diễn theo hàm nào , đối số của nó là một
con trỏ hàm trả về kiểu void

void glutMainLoop(void) ;
Cuối cùng ta phải lặp lại hàm main liên tục để “trình diễn hình ảnh”. Giống như
ngươi ta làm phim hoạt hình đó, các frame nối tiếp nhau trên một màn ảnh.


6
Page 6


Các lệnh glClearColor(), glClear(),glFush() là những lệnh cơ bản của Opengl
glClearColor() có nhiệm vụ chọn màu để xoá window, bạn dễ dàng nhận ra là nó
có 4 tham số, 4 tham số đó là RGBA( red green blue alpha).Không giống với hàm
RGB() trong Win32 API , 4 tham số này có giá trị trong khoảng 0.0f đến 1.0f(kiểu
float).
Các giá trị R,G,B trong OpenGL thì >=0.0 (không có) và <=1.0 (độ sáng cực đại).
Ba tham số đầu là màu đỏ xanh lá cây và xanh da trơi, còn tham số thứ 4 là độ sáng
tối của window.

Hàm glClear() mới thực sự xoá window, nó có những hằng số xác định.Có trương
hợp có những hàm chưa được chạy đến khi kết thúc chương trình, để tránh trương
hợp này hàm glFlush() được gọi, nó sẽ thực hiện tất cả các hàm chưa được chạy và
kết thúc chương trình.

Dùng glClear*() để định màu xóa cho các buffer.
Sau đó glClear(GLbitfied mask) để xóa buffer tương ứng với mask
Tham số của hàm glClear() có thể nhận từ 1 đến 4 giá trị sau:

Buffer Name
Color buffer GL_COLOR_BUFFER_BIT
Depth buffer GL_DEPTH_BUFFER_BIT
Accumulation buffer GL_ACCUM_BUFFER_BIT
Stencil buffer GL_STENCIL_BUFFER_BIT
Để định màu xóa cho mỗi buffer, ta dùng các hàm glClear*() như sau:
glClearColor(), glClearDepth(), glClearAccum(), glClearStencil().


Buộc việc vẽ hoàn tất

7
Page 7


Đối với các ứng dụng đồ họa chạy qua mạng, trong đó client chạy phần chương
trình chính và hiển thị kết quả đến server, thương thì client sẽ gom nhiều lệnh vẽ
vào một packet, sau đó mới gửi đến server. Nhưng làm sao để client biết được khi
nào thì ảnh trên server đã vẽ xong và gửi tiếp packet khác? Do đó nó sẽ đợi đến khi
nào packet đầy mới gửi tiếp. Nhưng packet có thể không bao giơ đầy vì việc vẽ
bên client đã hoàn tất và như vậy server không thấy được trọn vein kết quả vẽ
OpenGL cung cấp hàm glFlush() để chúng ta giải quyết vấn đề này. Lệnh này buộc
client gửi packet ngay cả khi packet chưa đầy. Lệnh này không đợi cho việc vẽ
hoàn tất, nó buộc việc vẽ phải bắt đầu thực hiện và do đó đảm bảo tất cả các lệnh
trước đó thực hiện trong một thơi gian giới hạn. Nếu máy chạy local thì ta không
cần dùng lệnh này.

Một lệnh khác cũng gần giống là lệnh glFinish(), nó thực hiện chức năng giống
glFlush() nhưng nó đợi phản hồi từ phần cứng đang vẽ hoặc mạng để khẳng định
việc vẽ đã hoàn tất. Lệnh này hữu dụng khi ta muốn đồng bộ hóa các phần vẽ. Ví
dụ ta muốn một phần nào đó vẽ hoàn tất xong thì mới thực hiện các phần khác.
Nhưng lạm dụng lệnh này sẽ làm chậm chương trình vì nó phải đợi phản hồi.

Phần II. Code và chương trình
chạy đồ thị
1. Code chính chạy đồ thị
Dưới đây là code để chạy DTHS cần vẽ.

#include<windows.h>

#include<gl/GL.h>
#include<gl/glut.h>
#include<String.h>
//---------**************THIET LAP CUA SO***********------------------------void setWindow(float left, float right, float bottom, float top)
{ glMatrixMode(GL_PROJECTION);// thiet lap ma tran
8
Page 8


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();// dua ma tran ve ma tran don vi
gluOrtho2D(left,right,bottom,top);
}
//----------************THIET LAP KHUNG NHIN********----------------------void setViewport(int left, int right, int bottom, int top)
{ glViewport(left, bottom,right-left,top-bottom);
}
//------------------**********VET KI TU**********------------------------------void vediem(char*String, float x, float y)
{ char*c;
glRasterPos2f(x,y);
for (c=String; *c!= '\0';c++)
{ glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, *c);//--font chu
HELVETICA}
glFlush();
}
//---------------*************LOI MO DAU**********------------------------------

void HELLO()
{ glClearColor(0.0,0.0,0.0,0.0);//---------***********XOA MAU********-------glShadeModel(GL_SMOOTH);
glColor4d(0.6,0.8,0.4,1.0);//-----*****TAO MAU CHO NET VE*********-----glClear(GL_COLOR_BUFFER_BIT);//-------******XOA MAN HINH TRONG
WINDAOW***----setWindow(-1.80,1.80,-1.80,1.80);//------******CUA SO*****-------------------setViewport(-50,600,-90,670); //------****KHUNG NHIN*****-------------------//--------------*************CAC BUOC VE DO THI**********-------------vediem("NHOM 19-H3TK5",-1,1);

vediem("* CHAO MUNG CAC BAN DEN VOI BAI GIANG VE HAM
SO.",-0.1,0.5);
vediem("* BAI GIANG DUOC THUC HIEN BOI NHOM 19-H3TK5.",0.1,0.3);
vediem("* CHUC CAC BAN CO MOT BUOI HOC VUI VE.",-0.1,0.1);
9
Page 9


vediem("* XIN VUI LONG NHAP PHAI CHUOT VA CHON MUC CHO
BAI HOC.",-0.1,-0.1);
vediem("THANK YOU!!!",0.8,-0.8);
glFlush();
}
//----------------************ CAC BUOC VE DO THI*******---------------------void hamso0()
{ glClearColor(0.0,0.0,0.0,0.0);//---------***********XOA MAU********-------glShadeModel(GL_SMOOTH);
glColor4d(0.9,0.7,0.5,0.2);//-----*****TAO MAU CHO NET VE*********-----glClear(GL_COLOR_BUFFER_BIT);//-------******XOA MAN HINH TRONG
WINDAOW***----setWindow(-1.50,1.50,-1.50,1.50);//------******CUA SO*****-------------------setViewport(-50,600,-90,670); //------****KHUNG NHIN*****-------------------//--------------*************CAC BUOC VE DO THI**********-------------vediem("*____CAC BUOC VE DTHS____*",-0.7,1.0);
vediem("* B1: Tim TXD cua ham so",-0.1,0.9);
vediem(" - Voi ham bac 3,4 co TXD la |R",-0.1,0.8);
vediem(" - Voi ham y=(ax+b)/(cx+d) thi co TXD la |R\{-d/c}",-0.1,0.7);
vediem("* B2: Khao sat su bien thien cua ham so",-0.1,0.6);
vediem(" . Tinh y',giai PT y'=0",-0.1,0.5);
vediem(" . Tinh cac gioi han(tiem can_neu co)",-0.1,0.4);
vediem(" . Lap bang bien thien",-0.1,0.3);
vediem(" . Tu bang bien thien suy ra",-0.1,0.2);
vediem(" - Cac khoang dong bien, ngich bien cua ham so",-0.1,0.1);
vediem(" - Cac diem cuc tri(neu co) cua ham so",-0.1,0.0);
vediem("* B3: Ve DTHS",-0.1,-0.1);
vediem(" . Tim giao diem cua DT voi truc Oy( cho x=0, tinh y",-0.1,-0.2);
vediem(" . Tim giao diem cua DT voi truc Ox( cho y=0, tinh x",-0.1,-0.3);

vediem(" bang cach gpt F(x)=0",-0.1,-0.4);
vediem(" . Chu y den tinh doi xung cua do thi",-0.1,-0.5);
vediem(" - DTHS bac 3 nhan trung diem cua cuc dai va cuc tieu ",-0.1,-0.6);
vediem(" lam TDX",-0.1,-0.7);
vediem(" - DTHS bac 4(trung phuong) nhan Oy lam truc DX",-0.1,-0.8);
10
Page 10


vediem(" - DTHS nhat bien nhan giao diem 2 duong tiem can ",-0.1,-0.9);
vediem(" lam tam doi xung",-0.1,-1.0);
vediem(" NHOM 9 - H3TK5",1.5,-1.1);
glEnd();
glFlush();
}
//------------------*********HAM BAC 3 *************---------------------------void hamsobac3()
{ glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glColor4d(0.9,0.6,0.3,0.2);
glClear(GL_COLOR_BUFFER_BIT);
setWindow(-1.50,1.50,-1.50,1.50);
setViewport(-50,600,-90,670);
glBegin(GL_LINES);//--------****NOI DIEM THANH DOAN THANG***
glVertex2f(0.0,0.0);//-----****DI CHUYEN DEN GOC O DE VE *******
glVertex2f(-1.2,0.0);//----------****VE OX*****--------------------------glVertex2f(0.0,0.0);
glVertex2f(1.2,0.0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.0,0.0);
glVertex2f(0.0,1.1);//------------*********VE OY**********---------------glVertex2f(0.0,0.0);

glVertex2f(0.0,-1.1);
//-----------**************VE MUI TEN CHO DO THI**************-----glVertex2f(1.2,0);
glVertex2f(1.15,0.025);
glVertex2f(1.2,0);
glVertex2f(1.15,-0.025);
glVertex2f(0,1.1);
glVertex2f(-0.025,1.05);
glVertex2f(0,1.1);
glVertex2f(0.025,1.05);
glEnd();
//------------******** CHIA TOA DO CHO DO THI************-------------glBegin(GL_LINES);//-----------**********DANH DAU DO THI******-----11
Page 11


glVertex2f(0.15,0);//-------********DANH DAU TRUC OX**********------glVertex2f(0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.3,0);
glVertex2f(0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.45,0);
glVertex2f(0.45,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.6,0);
glVertex2f(0.6,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.75,0);

glVertex2f(0.75,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.9,0);
glVertex2f(0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(1.05,0);
glVertex2f(1.05,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.15,0);
glVertex2f(-0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.3,0);
glVertex2f(-0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.45,0);
glVertex2f(-0.45,0.02);
glEnd();
glBegin(GL_LINES);
12
Page 12


glVertex2f(-0.6,0);
glVertex2f(-0.6,0.02);
glEnd();

glBegin(GL_LINES);
glVertex2f(-0.75,0);
glVertex2f(-0.75,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.9,0);
glVertex2f(-0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-1.05,0);
glVertex2f(-1.05,0.02);
glEnd();
glBegin(GL_LINES);//---------********DANH DAU TRUC OY********----glVertex2f(0,0.2);//---------********DANH DAU TRUC DUONG OY****--glVertex2f(0.02,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.4);
glVertex2f(0.02,0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.6);
glVertex2f(0.02,0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.8);
glVertex2f(0.02,0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,1.0);
glVertex2f(0.02,1.0);
glEnd();

glBegin(GL_LINES);//-------*********DANH DAU TRUC AM OY*****---glVertex2f(0,-0.2);
glVertex2f(0.02,-0.2);
glEnd();
glBegin(GL_LINES);
13
Page 13


glVertex2f(0,-0.4);
glVertex2f(0.02,-0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.6);
glVertex2f(0.02,-0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.8);
glVertex2f(0.02,-0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-1.0);
glVertex2f(0.02,-1.0);
glEnd();
//-----------**********DANH DAU DIEM CHO DO THI********-----------------glColor4d(0.9,0.6,0.3,0.2);//-------*****TAO MAU CHO NET VE******-----//----------*********************DANH DAU TRUC OY**************-----vediem("1",0.05,0.2);
vediem("2",0.05,0.4);
vediem("3",0.05,0.6);
vediem("4",0.05,0.8);
vediem("5",0.05,1.0);
vediem("Oy",0.07,1.05);
vediem("O",0.02,-0.05);

vediem("-1",0.05,-0.2);
vediem("-2",0.05,-0.4);
vediem("-3",0.05,-0.6);
vediem("-4",0.05,-0.8);
vediem("-5",0.05,-1.0);
vediem("NHOM 19_HTTT_VE DTHS",0.3,-1.1);
//------------*************DANH DAU TRUC OX*********----------------------vediem("1",0.15,-0.05);
vediem("2",0.3,-0.05);
vediem("3",0.45,-0.05);
vediem("4",0.6,-0.05);
vediem("5",0.75,-0.05);
vediem("6",0.9,-0.05);
vediem("7",1.05,-0.05);
14
Page 14


vediem("Ox",1.2,-0.06);
vediem("-1",-0.15,-0.05);
vediem("-2",-0.3,-0.05);
vediem("-3",-0.45,-0.05);
vediem("-4",-0.6,-0.05);
vediem("-5",-0.75,-0.05);
vediem("-6",-0.9,-0.05);
vediem("-7",-1.05,-0.05);
vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);
vediem("Voi A>0 va y'=0 co nghiem kep",1.05,1);
vediem("Do thi co 1 diem uon",1.05,0.9);
//--------------*************CAC BUOC VE DO THI**********------------------//----------------**********VE HAM SO************------------------------------//----------**************NHAP DANG DO THI CAN VE*******---------------float x=-0.45;
float dx=0.0001;

float a= 10;
float b=0;
float c=0;
float d=0;
float y=(a*x*x*x)+(b*x*x)+c*x+d;
while(x<=0.45)//------------***********CHAY DO THI*********-------------{ x=x+dx;
y=(a*x*x*x)+(b*x*x)+c*x+d;
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
glFlush();
}
//------------------*********HAM BAC 3 *************---------------------------void hamsobac31()
{ glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glColor4d(0.9,0.6,0.3,0.2);
glClear(GL_COLOR_BUFFER_BIT);
setWindow(-1.50,1.50,-1.50,1.50);
setViewport(-50,600,-90,670);
15
Page 15


glBegin(GL_LINES);//--------****NOI DIEM THANH DOAN THANG*****
glVertex2f(0.0,0.0);//-----****DI CHUYEN DEN GOC O DE VE ****glVertex2f(-1.2,0.0);//----------****VE OX*****--------------------------glVertex2f(0.0,0.0);
glVertex2f(1.2,0.0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.0,0.0);

glVertex2f(0.0,1.1);//------------*********VE OY**********---------------glVertex2f(0.0,0.0);
glVertex2f(0.0,-1.1);
//-----------**************VE MUI TEN CHO DO THI**************---------glVertex2f(1.2,0);
glVertex2f(1.15,0.025);
glVertex2f(1.2,0);
glVertex2f(1.15,-0.025);
glVertex2f(0,1.1);
glVertex2f(-0.025,1.05);
glVertex2f(0,1.1);
glVertex2f(0.025,1.05);
glEnd();
//------------******** CHIA TOA DO CHO DO THI************-----------------glBegin(GL_LINES);//-----------**********DANH DAU DO THI******-----glVertex2f(0.15,0);//-------********DANH DAU TRUC OX**********------glVertex2f(0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.3,0);
glVertex2f(0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.45,0);
glVertex2f(0.45,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.6,0);
glVertex2f(0.6,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.75,0);
16
Page 16



glVertex2f(0.75,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.9,0);
glVertex2f(0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(1.05,0);
glVertex2f(1.05,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.15,0);
glVertex2f(-0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.3,0);
glVertex2f(-0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.45,0);
glVertex2f(-0.45,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.6,0);
glVertex2f(-0.6,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.75,0);
glVertex2f(-0.75,0.02);

glEnd();
glBegin(GL_LINES);
glVertex2f(-0.9,0);
glVertex2f(-0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-1.05,0);
glVertex2f(-1.05,0.02);
glEnd();
glBegin(GL_LINES);//---------********DANH DAU TRUC OY********----glVertex2f(0,0.2);//---------********DANH DAU TRUC DUONG OY****--17
Page 17


glVertex2f(0.02,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.4);
glVertex2f(0.02,0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.6);
glVertex2f(0.02,0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.8);
glVertex2f(0.02,0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,1.0);
glVertex2f(0.02,1.0);

glEnd();
glBegin(GL_LINES);//-------*********DANH DAU TRUC AM OY*****---glVertex2f(0,-0.2);
glVertex2f(0.02,-0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.4);
glVertex2f(0.02,-0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.6);
glVertex2f(0.02,-0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.8);
glVertex2f(0.02,-0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-1.0);
glVertex2f(0.02,-1.0);
glEnd();
//-----------**********DANH DAU DIEM CHO DO THI********-----------------18
Page 18


glColor4d(0.9,0.6,0.3,0.2);//-------*****TAO MAU CHO NET VE******-----//----------*********************DANH DAU TRUC OY**************-----vediem("1",0.05,0.2);
vediem("2",0.05,0.4);
vediem("3",0.05,0.6);
vediem("4",0.05,0.8);
vediem("5",0.05,1.0);
vediem("Oy",0.07,1.05);

vediem("O",0.02,-0.05);
vediem("-1",0.05,-0.2);
vediem("-2",0.05,-0.4);
vediem("-3",0.05,-0.6);
vediem("-4",0.05,-0.8);
vediem("-5",0.05,-1.0);
vediem("NHOM 19_HTTT_VE DTHS",0.3,-1.1);
//------------*************DANH DAU TRUC OX*********----------------------vediem("1",0.15,-0.05);
vediem("2",0.3,-0.05);
vediem("3",0.45,-0.05);
vediem("4",0.6,-0.05);
vediem("5",0.75,-0.05);
vediem("6",0.9,-0.05);
vediem("7",1.05,-0.05);
vediem("Ox",1.2,-0.06);
vediem("-1",-0.15,-0.05);
vediem("-2",-0.3,-0.05);
vediem("-3",-0.45,-0.05);
vediem("-4",-0.6,-0.05);
vediem("-5",-0.75,-0.05);
vediem("-6",-0.9,-0.05);
vediem("-7",-1.05,-0.05);
vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);
vediem("Voi A>0 va pt y'=0 vo nghiem",1.05,1);
vediem("Do thi khong co diem uon",1.05,0.9);
//--------------*************CAC BUOC VE DO THI**********------------------//----------------**********VE HAM SO************------------------------------//----------**************NHAP DANG DO THI CAN VE*******---------------float x=-0.35;
float dx=0.0001;
float a= 10;
19
Page 19



float b=-2;
float c=0.5;
float d=0;
float y=(a*x*x*x)+(b*x*x)+c*x+d;
while(x<=0.48)//------------***********CHAY DO THI*********-------------{ x=x+dx;
y=(a*x*x*x)+(b*x*x)+c*x+d;
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
glFlush();
}
//--------------------------------***********----------------------------------void hamsobac32()
{ glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glColor4d(0.9,0.6,0.3,0.2);
glClear(GL_COLOR_BUFFER_BIT);
setWindow(-1.50,1.50,-1.50,1.50);
setViewport(-50,600,-90,670);
glBegin(GL_LINES);//--------****NOI DIEM THANH DOAN THANG
glVertex2f(0.0,0.0);//-----****DI CHUYEN DEN GOC O DE VE
glVertex2f(-1.2,0.0);//----------****VE OX*****--------------------------glVertex2f(0.0,0.0);
glVertex2f(1.2,0.0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.0,0.0);
glVertex2f(0.0,1.1);//------------*********VE OY**********---------------glVertex2f(0.0,0.0);
glVertex2f(0.0,-1.1);

//-----------**************VE MUI TEN CHO DO THI**************---------glVertex2f(1.2,0);
glVertex2f(1.15,0.025);
glVertex2f(1.2,0);
glVertex2f(1.15,-0.025);
glVertex2f(0,1.1);
20
Page 20


glVertex2f(-0.025,1.05);
glVertex2f(0,1.1);
glVertex2f(0.025,1.05);
glEnd();
//------------******** CHIA TOA DO CHO DO THI************-----------------glBegin(GL_LINES);//-----------**********DANH DAU DO THI******-----glVertex2f(0.15,0);//-------********DANH DAU TRUC OX**********------glVertex2f(0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.3,0);
glVertex2f(0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.45,0);
glVertex2f(0.45,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.6,0);
glVertex2f(0.6,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.75,0);
glVertex2f(0.75,0.02);

glEnd();
glBegin(GL_LINES);
glVertex2f(0.9,0);
glVertex2f(0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(1.05,0);
glVertex2f(1.05,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.15,0);
glVertex2f(-0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.3,0);
glVertex2f(-0.3,0.02);
21
Page 21


glEnd();
glBegin(GL_LINES);
glVertex2f(-0.45,0);
glVertex2f(-0.45,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.6,0);
glVertex2f(-0.6,0.02);
glEnd();
glBegin(GL_LINES);

glVertex2f(-0.75,0);
glVertex2f(-0.75,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.9,0);
glVertex2f(-0.9,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(-1.05,0);
glVertex2f(-1.05,0.02);
glEnd();
glBegin(GL_LINES);//---------********DANH DAU TRUC OY********----glVertex2f(0,0.2);//---------********DANH DAU TRUC DUONG OY****--glVertex2f(0.02,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.4);
glVertex2f(0.02,0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.6);
glVertex2f(0.02,0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,0.8);
glVertex2f(0.02,0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,1.0);
glVertex2f(0.02,1.0);
22
Page 22



glEnd();
glBegin(GL_LINES);//-------*********DANH DAU TRUC AM OY*****---glVertex2f(0,-0.2);
glVertex2f(0.02,-0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.4);
glVertex2f(0.02,-0.4);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.6);
glVertex2f(0.02,-0.6);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-0.8);
glVertex2f(0.02,-0.8);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-1.0);
glVertex2f(0.02,-1.0);
glEnd();
//-----------**********DANH DAU DIEM CHO DO THI********-----------------glColor4d(0.9,0.6,0.3,0.2);//-------*****TAO MAU CHO NET VE******-----//----------*********************DANH DAU TRUC OY**************-----vediem("1",0.05,0.2);
vediem("2",0.05,0.4);
vediem("3",0.05,0.6);
vediem("4",0.05,0.8);
vediem("5",0.05,1.0);
vediem("Oy",0.07,1.05);
vediem("O",0.02,-0.05);
vediem("-1",0.05,-0.2);

vediem("-2",0.05,-0.4);
vediem("-3",0.05,-0.6);
vediem("-4",0.05,-0.8);
vediem("-5",0.05,-1.0);
vediem("NHOM 19_HTTT_VE DTHS",0.3,-1.1);
//------------*************DANH DAU TRUC OX*********----------------------vediem("1",0.15,-0.05);
23
Page 23


vediem("2",0.3,-0.05);
vediem("3",0.45,-0.05);
vediem("4",0.6,-0.05);
vediem("5",0.75,-0.05);
vediem("6",0.9,-0.05);
vediem("7",1.05,-0.05);
vediem("Ox",1.2,-0.06);
vediem("-1",-0.15,-0.05);
vediem("-2",-0.3,-0.05);
vediem("-3",-0.45,-0.05);
vediem("-4",-0.6,-0.05);
vediem("-5",-0.75,-0.05);
vediem("-6",-0.9,-0.05);
vediem("-7",-1.05,-0.05);
vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);
vediem("Voi A>0 va y'=0 co 2 nghiem phan biet",1.05,1);
vediem("Do thi cat truc ox tai 3 diem phan biet",1.05,0.9);
//--------------*************CAC BUOC VE DO THI**********------------------//----------------**********VE HAM SO************------------------------------//----------**************NHAP DANG DO THI CAN VE*******---------------float x=-0.37;
float dx=0.0001;
float a= 10;

float b=-4;
float c=-1;
float d=0;
float y=(a*x*x*x)+(b*x*x)+c*x+d;
while(x<=0.65)//------------***********CHAY DO THI*********-------------{ x=x+dx;
y=(a*x*x*x)+(b*x*x)+c*x+d;
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
glFlush();
}
//----------------------------****************---------------------------------void hamsobac33()
{ glClearColor(0.0,0.0,0.0,0.0);
24
Page 24


glShadeModel(GL_SMOOTH);
glColor4d(0.9,0.6,0.3,0.2);
glClear(GL_COLOR_BUFFER_BIT);
setWindow(-1.50,1.50,-1.50,1.50);
setViewport(-50,600,-90,670);
glBegin(GL_LINES);//--------****NOI DIEM THANH DOAN THANG
glVertex2f(0.0,0.0);//-----****DI CHUYEN DEN GOC O DE VE
glVertex2f(-1.2,0.0);//----------****VE OX*****--------------------------glVertex2f(0.0,0.0);
glVertex2f(1.2,0.0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.0,0.0);

glVertex2f(0.0,1.1);//------------*********VE OY**********---------------glVertex2f(0.0,0.0);
glVertex2f(0.0,-1.1);
//-----------**************VE MUI TEN CHO DO THI**************-----glVertex2f(1.2,0);
glVertex2f(1.15,0.025);
glVertex2f(1.2,0);
glVertex2f(1.15,-0.025);
glVertex2f(0,1.1);
glVertex2f(-0.025,1.05);
glVertex2f(0,1.1);
glVertex2f(0.025,1.05);
glEnd();
//------------******** CHIA TOA DO CHO DO THI************-------------glBegin(GL_LINES);//-----------**********DANH DAU DO THI******-----glVertex2f(0.15,0);//-------********DANH DAU TRUC OX**********------glVertex2f(0.15,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.3,0);
glVertex2f(0.3,0.02);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.45,0);
glVertex2f(0.45,0.02);
glEnd();
25
Page 25


×