Bài Tập Lớn Xây Dựng Phần Mềm Hỗ Trợ Học Sinh Cấp 2 Học Hình Học Về Các Phép Biến Đổi Hình Học
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính. Đồ họa máy tính liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích và hình học họa hình, quang học và kĩ thuật máy tính và đặc biệt là chế tạo phần cứng ( các loại màn hình, các thiết bị nhập xuất, các vi mạch đồ họa).
Nghiên cứu các phép biến đổi hình học trong không gian thực hai chiều là một trong những nội dung quan trọng.
Qua thời gian tìm hiểu nhóm quyết định trọn đề tài Xây dựng phần mềm hỗ trợ học sinh cấp hai học về các phép biến đổi hình học nhằm giúp các em có thể hiểu rõ hơn về các phép biến đổi hình học trong không gian thực hai chiều.
Do quá trình tìm hiểu còn nhiều thiếu sót nên chương trình còn nhiều hạn chế, nhóm thực hiện rất mong nhận được ý kiến đóng góp từ phía cô giáo và các bạn để phần mềm được hoàn thiện hơn.
iem quanh tam O void Quay(float &x,float &y,float goc) { goc=(M_PI/180)*goc; float a=x,b=y; x=a*cos(goc)-b*sin(goc); y=a*sin(goc)+b*cos(goc); } //Quay 1 diem quanh tam bat ky void QuayTambatKy(float &x,float &y,float xtam,float ytam,float goc) { goc=(M_PI/180)*goc; float a=x+xtam,b=y+ytam; x=a*cos(goc)-b*sin(goc); y=a*sin(goc)+b*cos(goc); } //Doi xung tam O 1 diem void DoiXungTamO(float &x,float &y) { x=-x; y=-y; } //Doi xung tam bat ky void DoiXung(float &x,float &y,float xtam,float ytam) { x=2*xtam-x; y=2*ytam-y; } //Doi xung 1 diem qua Ox void DoiXungOX(float x,float &y) { y=-y; } //Doi xung 1 diem qua Oy void DoiXungOy(float &x,float y) { x=-x; } //Doi xung qua duong thang ax+by+c=0 bo void DXDuong(float &x,float &y,float a,float b,float c) { float t=(a*x+b*y+c)/(a*a+b*b); x=x-2*t*a; y=y-2*t*b; } //Ve duong thang ax+by+c=0 bo void VeDuong(float a,float b,float c) { if(a==0) { ChuyenDen(xw1,-c/b); VeDen(xw2,-c/b); } if(b==0) { ChuyenDen(-c/a,yw1); VeDen(-c/a,yw2); } if(a*b!=0) { if((yw1<=(-a*xw1-c)/b)&&(-a*xw1-c)/b<=yw2) { ChuyenDen(xw1,(-a*xw1-c)/b); VeDen(xw2,(-a*xw2-c)/b); } else { ChuyenDen((-c-b*yw2)/a,yw2); VeDen((-c-b*yw1)/a,yw1); } } } //Ve da giac n dinh void VenGiac(int n) { for(int i=1;i<=n;i++) { cout<<" Nhap toa do diem "<<i<<endl<<endl; cout<<"toa do x: "; cin>>X[i]; cout<<"toa do y: "; cin>>Y[i]; cout<<endl; } ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) { VeDen(X[i],Y[i]); } } void VeDaGiac(int n) { ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) { VeDen(X[i],Y[i]); } } //Tinh tien n giac void TinhTienDaGiac(int n,float ttx,float tty) { for(int i=1;i<=n;i++) { TinhTien(X[i],Y[i],ttx,tty); } } // ham tinh tien da giac 2 lan void TinhTien2LanDaGiac(int n,float ttx1,float tty1,float ttx2,float tty2) { for(int i=1;i<=n;i++) { TinhTien(X[i],Y[i],ttx1+ttx2,tty1+tty2); } } //Quay da giac quanh tam O void QuayDaGiac(int n,float goc) { for(int i=1;i<=n;i++) Quay(X[i],Y[i],goc); } //Quay da giac quanh 1 tam bat ky void QuayTamBatKy(int n,float a,float b,float goc) { float x[100],y[100]; for(int i=1;i<=n;i++) { x[i]=X[i]; y[i]=Y[i]; } TinhTienDaGiac(n,-a,-b); QuayDaGiac(n,goc); setcolor(YELLOW); TinhTienDaGiac(n,a,b); VeDaGiac(n); } //Bien doi ti le da giac void TiLeDaGiac(int n,float tlx,float tly) { for(int i=1;i<=n;i++) BienDoiTiLe(X[i],Y[i],tlx,tly); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Ham bien doi ti le da giac 2 lan void TiLeDaGiac2Lan(int n,float tlx1,float tly1,float tlx2, float tly2) { for(int i=1;i<=n;i++) BienDoiTiLe(X[i],Y[i],tlx1*tlx2,tly1*tly2); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Ham doi xung tam O da giac void DXTamODaGiac(int n) { setcolor(1); for(int i=1;i<=n;i++) DoiXungTamO(X[i],Y[i]); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Doi xung tam bat ky trong da giac void DoiXungTamBatKy(int n,float xtam,float ytam) { for(int i=1;i<=n;i++) DoiXung(X[i],Y[i],xtam,ytam); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Doi xung da giac qua Ox void DXDaGiacOX(int n) { setcolor(2); for(int i=1;i<=n;i++) DoiXungOX(X[i],Y[i]); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Doi xung n giac qua Oy void DXDaGiacOY(int n) { setcolor(3); for(int i=1;i<=n;i++) DoiXungOy(X[i],Y[i]); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //Doi xung da giac qua duong thang ax+by+c=0 void DoiXungDuong(int n,float a,float b,float c) { setcolor(5); for(int i=1;i<=n;i++) DXDuong(X[i],Y[i],a,b,c); ChuyenDen(X[n],Y[n]); for(int i=1;i<=n;i++) VeDen(X[i],Y[i]); } //ket hop phep quay va bien doi ti le void QuayTiLe(int n,float tlx,float tly, float goc) { QuayDaGiac(n,goc); TiLeDaGiac(n,tlx,tly); VeDaGiac(n); } //ket hop ham tinh tien va bien doi ti le void TinhTien_BienDoiTiLe(int n, float ttx,float tty,float tlx,float tly) { TinhTienDaGiac(n,ttx,tty); TiLeDaGiac(n,tlx,tly); VeDaGiac(n); } int main(void) { int m,n,p; initwindow(680,790); CuaSo(-15,-15,15,15); KhungNhin(120,120,500,500); VeTruc(); float ttx,tty,tlx,tly; int chon[10]; cout<< " "<<endl; cout<< " "<<endl; cout<<" CHUONG TRINH MO PHONG CAC PHEP BIEN HINH TRONG TOAN CAP 2"<<endl<<endl; cout<<" Giao Vien Huong Dan: ThS.Vu Minh Yen"<<endl<<endl; cout<<" SV Thuc Hien: Nhom 5 Lop KHMT1 - K5"<<endl; cout<<" ---------------------------------------------------------"<<endl<<endl<<endl; Mylabel1:; system("color 4f"); cout<<"Xin moi nhap lua chon: "<<endl<<endl; cout<<" 1.Cac phep bien hinh co ban "<<endl; cout<<" 2.Cac phep bien hinh ket hop "<<endl; cout<<" 3.Danh Sach Nhom "<<endl; cout<<" 4.Thoat"<<endl<<endl; cin>>m; if(m==1) { lb1:; cout>n; cout<< endl; VenGiac(n); if(n<=0) { cout<<"So dinh cua ban khong dung xin moi nhap lai: \n"<<endl; goto lb1; } cout<<"Ban co muon tiep tuc khong?: \n"<<endl; int t; cout<<" 1. Co 2.Khong"; cin>>t; if(t==1) { system("cls") ; VeTruc(); goto lb8; } else { system("cls"); cleardevice(); VeTruc(); goto Mylabel1; } cout<<endl; lb8:; for(int i=1;i<=5;i++) { MylabelDT1:; cout<<" Ban hay chon phep bien hinh: "<<endl<<endl; cout<<"1.Tinh tien 2.Ti le 3.Quay tam O 4.Doi Xung 5.Doi xung duong"<<endl; cin>>chon[i];setcolor(YELLOW); if(chon[i]==1) { cout>tty; cout>tty; TinhTienDaGiac(n,ttx,tty); VeDaGiac(n); } else if(chon[i]==2) { cout>tlx; cout>tly; TiLeDaGiac(n,tlx,tly); } else if(chon[i]==3) { cout>goc; QuayDaGiac(n,goc); VeDaGiac(n); } else if(chon[i]==4) { cout>xtam; cout>ytam; DoiXungTamBatKy(n,xtam,ytam); } else if(chon[i]==5) { cout<<"Nhap truc doi xung ax+by+c=0"<<endl; cout>a;cout>b;cout>c; VeDuong(a,b,c); DoiXungDuong(n,a,b,c); } else { cout<<"Nhap sai phep bien hinh \n"; cout<<"Moi ban nhap l trong cac phep bien hinh: "<<endl; goto MylabelDT1; } if((i=1)||(i=2)||(i=3)||(i=4)||(i=5)) { cout<<endl; cout<<"Ban co muon tiep tuc khong?: \n"<<endl; MylabelDT2:; int t; cout<<"1.Quay lai tu dau 2. Tiep tuc 3.Thoat \n"; cin>>t; if(t==1) { system("cls"); cleardevice(); VeTruc(); goto Mylabel1; } if(t==2) { system("cls"); VeTruc(); goto MylabelDT1; } else if(t==3) exit(0); else { cout<<" Hay nhap lai lua chon :\n"; goto MylabelDT2; } } } } if(m==2) { float a,b,c,d; lb5:; cout>n; VenGiac(n); if(n<=0) { cout<<"So dinh cua ban khong dung xin moi nhap lai: \n"<<endl; goto lb5; } cout<<"Ban co muon tiep tuc khong?: \n"<<endl; int t; cout<<" 1. Co 2.Khong"; cin>>t; if(t==1) { system("cls") ; VeTruc(); goto lb9; } else { system("cls"); cleardevice(); VeTruc(); goto Mylabel1; } cout<<endl; lb9:; for(int i=1;i<=5;i++) { Mylabel5:; cout<<" Hay chon mot trong cac phep bien hinh: "<<endl; cout<<"1.Tinh tien 2 lan 2.Ti le 2 lan 3.Quay tam bat ki 4.Quay+ti le 5.Tinh tien+ti le"<<endl; cin>>chon[i];setcolor(YELLOW); if(chon[i]==1) { cout>a; cout>b; cout>c; cout>d; TinhTien2LanDaGiac(n,a,b,c,d); VeDaGiac(n); } else if(chon[i]==2) { cout>a; cout>b; cout>c; cout>d; TiLeDaGiac2Lan(n,a,b,c,d); VeDaGiac(n); } else if(chon[i]==3) { cout>xtam; cout>ytam; cout>goc; QuayTamBatKy(n,xtam,ytam,goc); } else if (chon[i]==4) { cout>tlx; cout>tly; cout>goc; QuayTiLe(n,tlx,tly,goc); } else if(chon[i]==5) { cout>ttx; cout>tty; cout>tlx; cout>tly; TinhTien_BienDoiTiLe(n,ttx,tty,tlx,tly); } else { cout<<"Nhap sai toa do \n"; cout<<"Moi ban nhap lai toa do: "<<endl; goto Mylabel5; } if((i=1)||(i=2)||(i=3)||(i=4)||(i=5)) { cout<<"Ban co muon tiep tuc khong? \n"<<endl; MylabelDT6:; int t; cout<<"1.Quay lai tu dau 2. Tiep tuc 3.Thoat \n"; cin>>t; if(t==1) { system("cls"); cleardevice(); VeTruc(); goto Mylabel1; } else if(t==2) { system("cls"); VeTruc(); goto Mylabel5; } else if(t==3) exit(0); else { cout<<" Hay nhap lai lua chon: \n"; goto MylabelDT6; } } } } if(m==3) { cout<<" Danh sach thanh vien trong nhom: "<<endl<<endl; cout<<" 1: Ngo Thi Bich "<<endl; cout<<" 2: Nguyen Quang Mung "<<endl; cout<<" 3: Luong Thi Thu "<<endl; cout<<"Ban co muon tiep tuc khong?: \n"; MylabelDT3:; int t; cout<<"1.Co 2.Thoat \n"; cin>>t; if(t==1) { system("cls"); VeTruc(); goto Mylabel1; } else if(t==2) exit(0); else { cout<<" Hay nhap lai lua chon: \n"; goto MylabelDT3; } } else if(m==4) exit(0); else { cout<<"Ban da nhap sai: \n"; cout<<"Ban co muon tiep tuc khong?: \n"; Mylabel6:; int t;cout>t; if(t==1) { system("cls"); VeTruc(); goto Mylabel1; } else if(t==2) exit(0); else { cout<<"Nhap sai .Moi nhap lai :\n"; goto Mylabel6; } } getch(); closegraph(); }
File đính kèm:
- BaoCaoDoHoaMayTinh.doc