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.

 

doc36 trang | Chia sẻ: hongmo88 | Lượt xem: 1312 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu 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, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trê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:

  • docBaoCaoDoHoaMayTinh.doc