Đề tài : vẽ tam giác và các phép biến đổi

20 2.6K 2
Đề tài : vẽ tam giác và các phép biến đổi

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trường đại học công nghiệp Hà Nội Khoa công nghệ thông tin o0o Bài tập lớn môn : Đồ họa máy tính Đề tài : vẽ tam giác và các phép biến đổi Nhóm thực hiện: Nhóm 30 Thành viên trong nhóm: 1. Dương Vương 2. Nguyễn Văn Quý Giáo viên hướng dẫn: Nguyễn Thị Cẩm Ngoan 1 Hà Nội, tháng 2 năm 2013 Yêu Cầu Thực Hiện: Viết chương trình vẽ 1 tam giác. Toạ độ các đỉnh được nhập từ bàn phím, mỗi cạnh có một màu khác nhau.Sử dụng các phép biến đổi hình:tịnh tiến, tỉ lệ, quay tâm 0, đối xứng qua điểm, đối xứng qua đường thẳng. 2 MỤC LỤC I.Vẽ Tam Giác 4 II.Các phép biến hình cơ bản 6 1.Phép tịnh tiến 6 2.Phép biến đổi tỉ lệ 8 3.Phép đối xứng 10 Phép đối xứng qua đường thẳng ax+by+c = 0 13 4.Phép quay 14 CHƯƠNG 2 : CÀI ĐẶT CHƯƠNG TRÌNH 15 3 I.PHÂN TÍCH BÀI TOÁN I.Vẽ Tam Giác Chuyển bài toán vẽ tam giác trong không gian thực về bài toán vẽ trong không gian 2D . Xây dựng bộ công cụ chuyển đổi : void cuaSo(float x1, float y1, float x2, float y2) { xw1 = x1; xw2 = x2; yw1 = y1; yw2 = y2; } // Tao khung nhin void khungNhin(int x1, int y1, int x2, int y2) { xv1 = x1; yv1 = y1; xv2 = x2; yv2 = y2; // Ti le phong to tlx = (xv2 - xv1) / (xw2 - xw1); tly = (yv2 - yv1) / (yw2 - yw1); } // Xay dung bo cong cu 2D void chuyenDen(float x, float y) { int xm = (int)(tlx * (x - xw1) + xv1 + 0.5); int ym = (int)(tly * (yw2 - y) + yv1 + 0.5); moveto(xm, ym); 4 } void veDen(float x, float y) { int xm = (int)(tlx * (x - xw1) + xv1 + 0.5); int ym = (int)(tly * (yw2 - y) + yv1 + 0.5); lineto(xm, ym); } Dựa vào bộ công cụ vừa cài đặt ta có thể cài đặt vẽ tam giác với các cạnh được nhập vào từ bàn phím , mỗi cạnh lại có màu khác nhau void veTamGiac(int x1, int y1, int x2, int y2, int x3, int y3) { float x, y; x = x1; y = y1; chuyenDen(x,y);setcolor(2); x = x2; y = y2; veDen(x,y);setcolor(3); x = x3; y = y3; veDen(x,y);setcolor(4); x = x1; y = y1; veDen(x,y); } 5 II.Các phép biến hình cơ bản Bản chất của các phép biến đổi hình học là sự thay đổi các mô tả về tọa độ của đối tượng từ đó làm đối tượng thay đổi về hướng, kích thước cũng như hình dạng. 1.Phép tịnh tiến Ảnh của phép tịnh tiến theo vector (a,b) của điểm P(x,y) là điểm Q(x*,y*)    += += byy axx * * Vector tịnh tiến (a,b) còn gọi là “vector độ dời”. Chúng ta có thể áp dụng quy tắc trên cho mọi điểm của đối tượng để dịch chuyển nó. Đơn giản hơn, để tịnh tiến một đa giác chỉ cần tịnh tiến các đỉnh của nó rồi vẽ lại đa giác mới. Tương tự, đối với đường tròn, ellip ta tịnh tiến tâm của chúng tới vị trí mới rồi vẽ lại. 6 Nếu gọi ttx và tty lần lượt là độ dời theo trục hoành và trục tung thì tọa độ của điểm mới Q(x’,y’) sau khi tịnh tiến điểm P(x,y) sẽ là: Khi đó (ttx,tty) được gọi là vecto tịnh tiến hay độ dời  Ma trận biến đổi  Thuật toán cài đặt void TinhTien(float &x,float &y,float ttx,float tty) { x=x+ttx; y=y+tty; } 7 1 0 0 0 1 0 tlx tly 0 T= Hình 2.1 Phép tịnh tiến 2.Phép biến đổi tỉ lệ Phép biến đổi tỉ lệ làm thay đổi kích thước của đối tượng. Để co hay dãn tọa độ của một điểm P(x,y) theo trục hoành và trục tung lần lượt là tlx, tly ta nhân lần lượt tlx và tly vào các tọa độ của P Ma trận biến đổi  Khi các giá trị tlx và tly nhỏ hơn 1 thì phép biến đổi tỉ lệ thu nhỏ đối tượng và ngược lại khi các phép biến đổi lớn hơn 1 phép biến đổi phóng to đối tượng  Khi tỉ lệ tlx=tly ta gọi đó là phép đồng dạng. Phép đồng dạng là phép biến đổi bảo toàn tính cân xứng của đối tượng. 8 x’=x*tlx; y’=y*tly;  Tâm tỉ lệ là điểm không bị thay đổi qua các phép biến đổi tỉ lệ.  Nhận xét : Khi phép biến đổi tỉ lệ thu nhỏ đối tượng, đối tượng sẽ được dời về gần gốc tọa độ hơn, tương tự khi phóng lớn đối tượng , đối tượng sẽ được dịch chuyển xa gốc tọa độ hơn.  Thuật toán cài đặt void BienDoiTiLe(float &x,float &y,float tlx,float tly) { x=x*tlx; y=y*tly; } 9 Hình 1.2 Phép biến đổi tỉ lệ 3.Phép đối xứng Phép đối xứng trục có thể xem là phép quay 180 0 quanh trục đối xứng. Phép đối xứng qua trục hoành và trục tung có ma trận lần lượt là:           − =           −= 100 010 001 , 100 010 001 OyOx MM  Thuật toán cài đặt void DoiXung(float x,float y,float xtam,float ytam) { x=2*xtam-x; y=2*ytam-y; } 10 [...]...Hình 1.3.1 Phép đối xứng với tâm bất kì Phép đối xứng qua đường thẳng X bất kỳ 11 Phép đối xứng qua đường thẳng Y bất kỳ 12 Phép đối xứng qua đường thẳng ax+by+c = 0 13 4 .Phép quay Phép quay làm thay đổi hướng của đối tượng Để xác định phép quay, ta cần biết tâm quay và góc quay Phép quay điểm P(x,y) quanh gốc tọa độ một góc α tạo thành điểm ảnh Q(x*,y*) có công thức như sau:  x* = x cos α −... cout>n2; veTamGiac(a1+n1,a2+n2,b1+n1,b2+n2,c1+n1,c2+n2); // ti le tam giac cout> k1; cout>k2; veTamGiac(a1*k1,a2*k2,b1*k1,b2*k2,c1*k1,c2*k2); // doi xung qua diem M bat ky cout>M1; cout>M2; veTamGiac(2*M1-a1,2*M2-a2,2*M1-b1,2*M2-b2,2*M1-c1,2*M2c2); // quay tam giac... veTruc(); // ve tam giac cout . 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); . :";cin>>M2; veTamGiac(2*M1-a1,2*M2-a2,2*M1-b1,2*M2-b2,2*M1-c1,2*M 2- c2); // quay tam giac quanh tam O cout<<"nhap vao goc quay "; cin>>goc; goc=(3.14/180)*goc; veTamGiac(a1*cos(goc)-a2*sin(goc),a1*sin(goc) +a2*cos(goc),b1*cos(goc)-b2*sin(goc),b1*sin(goc) +b2*cos(goc),c1*cos(goc)-c2*sin(goc),c1*sin(goc)+c2*cos(goc)); . veDen(xw2, 0); chuyenDen(xw 2-0 .4 ,-0 .5); outtext("x"); // Ve truc Oy chuyenDen(0, yw1); veDen(0, yw2); chuyenDen (-0 .8,yw2); outtext("y"); chuyenDen (-1 ,-0 .4); outtext("O");

Ngày đăng: 21/11/2014, 00:56

Từ khóa liên quan

Mục lục

  • I.Vẽ Tam Giác

  • II.Các phép biến hình cơ bản

    • 1.Phép tịnh tiến

    • 2.Phép biến đổi tỉ lệ

    • 3.Phép đối xứng

    • Phép đối xứng qua đường thẳng ax+by+c = 0

    • 4.Phép quay

    • CHƯƠNG 2 : CÀI ĐẶT CHƯƠNG TRÌNH

Tài liệu cùng người dùng

Tài liệu liên quan