1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài vẽ chữ l, dùng phím điều khiển di chuyển minh họa các phép tịnh tiến, đối xứng qua trái, qua phải và quay

23 513 2

Đ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

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 302,26 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trường Đại Học Công Nghiệp Hà Nội Khoa Công Nghệ Thông TinBÀI TẬP LỚN Môn: Đồ họa máy tính Đề tài 8: Vẽ chữ L, dùng phím điều khiển di chuyển minh họa các phép tịnh tiến, đối xứng qua t

Trang 1

Trường Đại Học Công Nghiệp Hà Nội Khoa Công Nghệ Thông Tin

BÀI TẬP LỚN

Môn: Đồ họa

máy tính

Đề tài 8: Vẽ chữ L, dùng phím điều khiển di chuyển minh họa các phép

tịnh tiến, đối xứng qua trái, qua phải và quay.

Giáo viên hướng dẫn: ThS.Nguyễn Thị Cẩm Ngoan

Sinh viên thực hiện:

1 Nguyễn Mạnh Thắng

2 Vũ Lương Bằng

3 Ngô Xuân Long

Trang 2

Lời nói đầu

Đồ 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ểnhì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 chúng em đã được giao làm đề tài: Vẽ chữ L,dùng phím điều khiển di chuyển minh họa các phép tịnh tiến, đối xứng qua trái,qua phải và quay

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ạnchế, 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ácbạn để phần mềm được hoàn thiện hơn

Hà Nội, ngày 28 tháng 2 năm 2013

Trang 3

IV. Hướng giai quyết

Chương II: PHÂN TÍCH

I. Các giải thuật sinh thực thể cơ sở

1) Giả thuật trung điểm-Midpoint

2) Thuật toán MidPoint vẽ đường thẳng

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

1) Phép tịnh tiến

2) Phép quay

3) Đối xứng

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

1. Giao diện chương trình

Trang 4

CHƯƠNG I: KHẢO SÁT

I. Mục đích nghiên cứu

Tạo ra chữ L có thể dùng phím điều khiển di chuyển minh họa các phép tịnh tiến, đối xứng( Qua trái, qua phải, lên, xuống) và phép quay

II. Đối tượng nghiên cứu

Vẽ đường thẳng bằng thuật toán MidPoint, thuật toán dung phím điều khiển

di chuyển minh họa các phép tịnh tiến, đối xứng( qua trái, qua phải, lên, xuống), vàphép quay

III.Khảo sát

Qua khảo sát trên các máy tính sử dụng hệ điều hành Windows 7, 8 , trên Win XP thì chương trình đều sử dụng được, di chuyển bằng phím điều khiển minhhọa các phép tịnh tiến, đối xứng (qua trái, qua phải, lên, xuống), và phép quay chưa thực hiện được trong một số trường hợp

IV. Hướng giải quyết

Tìm thêm tài liệu và nghiên cứu them về phép quay

CHƯƠNG II: PHÂN TÍCH

Trang 5

A

B

A

I. Các giải thuật sinh thực thể cơ sở

1) Giả thuật trung điểm-Midpoint

Jack Bresenham 1965 / Pitteway 1967, áp dụng cho việc sinh các đường thẳng và đường tròn 1985

Xét trung điểm của đoạn AB (M)

Nếu M ở trên đoạn thẳng AB thì chọn B còn M ở dưới đoạn thẳng AB chọn A Công thức đơn giản hơn, tạo được các điểm tương tự như với Bresenham

d = f(x + 1, y + 1/2) là trung điểm của đoạn AB

Mô tả giải thuật Midpoint

So sánh hay kiểm tra M sẽđược thay bằng việc xét giá trị d

- d > 0 điểm B được chọn khi đó yi+1 = yi

- nếu d < 0 điểm A được chọn khi đó yi+1 = yi + 1

Trường hợp d = 0 chúng ta có thể chọn điểm bất kỳ hoặc A, hoặc B Sử dụngphương pháp biểu diễn không tường minh

f(x,y)= ax +by +c =0 (1)dx =x2 –x1 dy =y2 –y1

Biểu diễn tường minh:

Trang 6

y= (dy/dx)x +B hay

f(x,y)=0= xdy - ydx +Bdx (2)

So sánh (1) và (2)

a=dyb=-dx c= Bdx

Có f(x,y)=0 với mọi (x,y) thuộc đường thẳng

Đặt d =f(xi +1,yi +1/2) = a(xi +1) +b(yi +1/2) +c

+ Nếu chọn A (d<0) thì M sẽ tăng theo 2 hướng x,y

d =f(xi +2,yi +3/2) = a(xi+2) +b(yi +3/2) +c

di+1 – di = a+b

Hay di+1 = di + dy - dx

+ Nếu chọn B (d>0) thì M sẽ tăng theo x

di+1 =f(xi +2,yi +1/2) = a(xi +2) +b(yi +1/2) +c

di+1 - di = a

Hay di+1 = di + dy

Tính d1 ?

d1 = f(x1 +1,y1 +1/2) = a(x1 +1) +b(y1 +1/2) +c

= ax1 +by1 +c +a +1/2 b = f(x1 ,y1 ) +a +b/2

Có (x1 ,y1 ) là điểm bắt đầu, nằm trên đoạn thẳng nên f(x1 ,y1 ) = 0

Trang 7

Vậy d1 = a+ b/2 = dy - dx/2

2) Thuật toán MidPoint vẽ đường thẳng:

void MidPoint(int x1,int y1,int x2,int y2,int color)

putpixel(x+1,y+1,color);

y++;

P+=dy-dx;

Trang 8

} else {

putpixel(x+1,y,color);

P+=dy;

} x++;

putpixel(x+1,y+1,color);

x++;

P+=dx-dy;

Trang 9

} else {

putpixel(x,y+1,color);

P+=dx;

} y++;

}

}

putpixel(x2,y2,color);

}

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ìnhdạng

1) Phép tịnh tiến

Để tịnh tiến một điểm P(x,y) từ vị trí này sang vị trí khác trong mặt phẳng, ta cộngthem các giá trị mô tả độ dời vào các tọa độ của P Nếu gọi trx và try 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’) sẽ là:

X’=x+trx

Trang 10

(trx,try) còn được gọi là vector tịnh tiến hay vector độ dời

Chúng ta có thể dịch chuyển toàn bộ một đối tượng bằng cách áp dụng quy tắc trêncho mọi điểm thuộc đối tượng Để tịnh tiến một đoạn thẳng, đơn giản chỉ cần tịnhtiến hai điểm đầu và cuối của nó rồi sau đó vẽ lại đoạn thẳng nối hai điểm mới Với

đa giác, ta tịnh tiến các đỉnh của nó sau đó vẽ lại đa giác với các đỉnh mới Mộtcách tương tự, để tịnh tiến các đối tượng như đường tròng, ellipse, ta tịnh tiến tâmcủa chúng tới vị trí mới rồi vẽ lại

(b)

Phép tịnh tiến một điểm (a) và đối tượng với vectortinhj tiến(b)

Biểu diễn phép tịnh tiến dưới dạng tọa độ thuần nhất:

Trang 11

Phép quay làm thay đổi hướng của đối tượng Một phép quay đòi hỏi phải có tâm quay, góc quay Góc quay dương thường được quy ước là chiều ngược kim đồng

hồ Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ một góc α:

X’= cosα.x – sinα.y

Y’=sinα.x + cosα.y

Phép quay một đối tượng quanh gốc tọa độ một góc 60°

Biểu diễn phép quay dưới dạng tọa độ thuần nhất

Trang 12

Mrfy= 0 1 0

0 0 1

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

1. Giao diện chương trình:

Các thuật toán, các phép biến hình được Demo thành chương trình bằng ngôn

ngữ C++ Đầu tiên chương trình sẽ xuất hiện

Với hệ trục tọa độ oxy đầu tiên dể bao quát chương trình

Trang 13

Đây là giao diện vẽ chữ L bằng thuật toán MidPoint

Thuật toán cài đặt vẽ chữ L:

#define radian 10 // he so doi tu do sang radian

void MidPoint(int x1,int y1,int x2,int y2,int color)

while (x<x2) {

Trang 14

if (P>=0) {

putpixel(x+1,y+1,color);

y++;

P+=dy-dx;

} else {

putpixel(x+1,y,color);

P+=dy;

} x++;

} } else

{ float P=dx/2-dy;

while (y<=y2) {

if (P>=0) {

putpixel(x+1,y+1,color);

x++;

P+=dx-dy;

} else {

putpixel(x,y+1,color);

P+=dx;

} y++;

} } putpixel(x2,y2,color);

}

void buocnhay(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int x5,int y5,intx6,int y6)

Trang 16

Di chuyển chữ L sang bên tráiDi chuyển chữ L sang bên phải.

Di chuyển chữ L lên trên

Di chuyển chữ L xuống dưới

Trang 17

Thuật toán cài đặt bắt phím:

case 75 : x1-=10; x2-=10; x3-=10; x4-=10; x5-=10; x6-=10; break;

case 77 : x1+=10; x2+=10; x3+=10; x4+=10; x5+=10; x6+=10; break;

case 72 : y1-=10; y2-=10; y3-=10; y4-=10; y5-=10; y6-=10; break;

case 80 : y1+=10; y2+=10; y3+=10; y4+=10; y5+=10; y6+=10; break;

} vehinh(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6);

}while(c!=27);

}

Thuật toán quay góc:

void quaygoc(float x,float y,float goc)

float xa = x1 * cos(goc) - y1 * sin(goc);

float ya = x1 * sin(goc) + y1 * cos(goc);

Trang 18

// Quay diem B

float xb = x2 * cos(goc) - y2 * sin(goc);

float yb = x2 * sin(goc) + y2 * cos(goc);

// Quay diem C

float xc = x3 * cos(goc) - y3 * sin(goc);

float yc = x3 * sin(goc) + y3 * cos(goc);

// Quay diem D

float xd = x4 * cos(goc) - y4 * sin(goc);

float yd = x4 * sin(goc) + y4 * cos(goc);

// Quay diem E

float xe = x5 * cos(goc) - y5 * sin(goc);

float ye = x5 * sin(goc) + y5 * cos(goc);

// Quay diem F

float xf = x6 * cos(goc) - y6 * sin(goc);

float yf = x6 * sin(goc) + y6 * cos(goc);

//Bài tap lon

//Ðe 8:Ve chu L, dùng phím dieu khien di chuyen minh hoa các phép tinh tien, doi xung qua trái, qua phai và quay

Trang 19

void MidPoint(int x1,int y1,int x2,int y2,int color)

putpixel(x+1,y+1,color);

y++;

P+=dy-dx;

} else {

putpixel(x+1,y,color);

P+=dy;

} x++;

putpixel(x+1,y+1,color);

x++;

P+=dx-dy;

} else {

Trang 20

P+=dx;

} y++;

vehinh(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6);

for (int i = 0; i < 7; i++)

{

// Quay diem A

Trang 21

float xa = x1 * cos(goc) - y1 * sin(goc);

float ya = x1 * sin(goc) + y1 * cos(goc);

// Quay diem B

float xb = x2 * cos(goc) - y2 * sin(goc);

float yb = x2 * sin(goc) + y2 * cos(goc);

// Quay diem C

float xc = x3 * cos(goc) - y3 * sin(goc);

float yc = x3 * sin(goc) + y3 * cos(goc);

// Quay diem D

float xd = x4 * cos(goc) - y4 * sin(goc);

float yd = x4 * sin(goc) + y4 * cos(goc);

// Quay diem E

float xe = x5 * cos(goc) - y5 * sin(goc);

float ye = x5 * sin(goc) + y5 * cos(goc);

// Quay diem F

float xf = x6 * cos(goc) - y6 * sin(goc);

float yf = x6 * sin(goc) + y6 * cos(goc);

Trang 22

case 75 : x1-=10; x2-=10; x3-=10; x4-=10; x5-=10; x6-=10; break;

case 77 : x1+=10; x2+=10; x3+=10; x4+=10; x5+=10; x6+=10; break;

case 72 : y1-=10; y2-=10; y3-=10; y4-=10; y5-=10; y6-=10; break;

case 80 : y1+=10; y2+=10; y3+=10; y4+=10; y5+=10; y6+=10; break;

} vehinh(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6);

Trang 23

TỰ ĐÁNH GIÁ

Ưu điểm: -Dễ dàng sử dụng và nâng cấp

-Chiếm ít tài nguyên của máy

Khuyết điểm: -Còn thiếu một vài chức năng

Hướng phát triển:-Trao đổi, tìm kiếm thông tin trên mạng

KẾT LUẬN

Qua quá trình tìm hiểu và phân tích đề tài “Vẽ chữ L, dùng phím điều khiển

di chuyển minh họa các phép tịnh tiến, đối xứng qua trái, qua phải và quay ”chúng em đã hiểu được cách phân tích và thiết kế một phần mềm Tuy nhiên dokiến thức còn hạn hẹp nên chúng em chưa thể phân tích được sâu sắc hơn và đưa rađược một phần mềm hoàn chỉnh, nhưng em mong rằng qua đề tài này các bạn cóthể hiểu thêm về cách vẽ một đa giác thành chữ cái và cách dùng phím di chuyểnchữ cái trên chương trình

Ngày đăng: 06/11/2014, 01:09

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w