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

BÁO cáo CHUYÊN đề học PHẦN đồ họa máy TÍNH đề tài CHƯƠNG TRÌNH mô PHỎNG bàn cờ 2d

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 (657.78 KB, 47 trang )

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN

ĐỢI HỌC ĐIỆn Lực
ELECTRIC POWER UNIVERSITY

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
ĐÒ HỌA MÁY TÍNH
ĐỀ TÀI: CHƯƠNG TRÌNH MƠ PHỎNG BÀN CỜ 2D.

NGUYỄN ĐỨC LONG (NT)

Sinh viên thực hiện:

LÃ QUỐC NGHỊ
CAO HOÀI NAM
PHẠM QUANG ÁNH
Giảng viên hướng dẫn:

THẦY. NGÔ TRƯỜNG GIANG

Ngành:

CÔNG NGHỆ THÔNG TIN

Chun ngành:

CƠNG NGHỆ PHẦN MỀM

Lớp:


D13CNPM1 (NHĨM 12)

HÀ NỘI,
06/2020.


TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN

ĐỢI HỌC ĐIỆn Lực
ELECTRIC POWER UNIVERSITY

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
ĐÒ HỌA MÁY TÍNH
ĐỀ TÀI: CHƯƠNG TRÌNH MƠ PHỎNG BÀN CỜ 3D.

NGUYỄN ĐỨC LONG (NT)

Sinh viên thực hiện:

LÃ QUỐC NGHỊ
CAO HOÀI NAM
PHẠM QUANG ÁNH
Giảng viên hướng dẫn:

THẦY. NGÔ TRƯỜNG GIANG

Ngành:

CÔNG NGHỆ THÔNG TIN


Chuyên ngành:

CÔNG NGHỆ PHẦN MỀM

Lớp:
HÀ NỘI,
06/2020.


D13CNPM1 (NHÓM 12)

HÀ NỘI,
06/2020.


PHIẾU CHẤM ĐIỂM
Sinh viên thực hiện:
STT Họ và tên
1

Nguyễn Đức Long

2

Phạm Quang Ánh

3

Lã Quốc Nghị


4

Cao Hồi Nam

Gíao viên chấm điểm:
Họ và tên
Giáo viên 1:

Giáo viên 2:

Nội dung thực hiện

Chữ ký

Điểm

Chữ ký

Ghi chú


Mục Lục
A.
B.


C.

A. MỞ ĐẦU


D.
Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh và công
nghệ luôn
luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta, hoặc thông qua các
bit dữ liệu lưu trữ trong microchip hoặc thơng qua giao tiếp bằng tiếng nói. Câu
châm ngơn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời” hay “trăm nghe không
bằng một thấy” cho thấy ý nghĩa rất lớn của hình ảnh trong việc truyền tải thơng tin.
Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong
trường hợp bất đồng về ngơn ngữ. Do đó khơng có gì ngạc nhiên khi mà ngay từ khi
xuất hiện máy tính, các nhà nghiên cứu đã cố gắng sử dụng nó để phát sinh các hình
ảnh trên màn hình. Trong suốt gần 50 năm phát triển của máy tính, khả năng phát
sinh hình ảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu như tất cả
các máy tính đều có khả năng đồ họa.
E.
Đồ họa máy tính là một trong những lĩnh vực lý thú nhất và phát triển
nhanh
nhất của tin học. Nó cịn là sự kết hợp giữa phương pháp và công nghệ dùng trong
việc chuyển đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính. Đồ 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ề ở tố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ị, điều khiển hình ảnh trên màn hình máy
tính. Đồ họa máy tính có 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, hình học họa hình,...và kỹ thuật máy tính, đặc biết là chế tạo phần cứng.
F.
Chúng ta có thể vẽ ra những hình ảnh khơng chỉ là ảnh tĩnh mà cịn có
thể biến
đổi thành những hình ảnh sinh động qua phép tịnh tiến, phép biến đổi,... Do vậy,
qua thời gian tìm hiểu nhóm em đã quyết định chọn đề tài “Viết Chương trình mơ
phỏng bàn cờ 3D.” nhằm giúp mọi người 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.


6


G.
H.

B. NỘI DUNG

Chương I: ĐỒ HỌA HAI CHIỀU

1. Vẽ đường thẳng
I.

a. Thuật tốn Bressenham

J. • Thuật tốn
K.

Thuật tốn Bresenham đưa ra cách chọn y± + 1 là yi hay y± + 1

theo một
hướng khác. Đó là so sánh khoảng cách giữa điểm thực y với 2 điểm gần kề nó
nhất. Nếu điểm nào nằm gần điểm thực hơn thì sẽ được chọn làm điểm vẽ tiếp theo.

M.

L.

Xj + 1


Xi

N.
O.

Hình 1.1

P.

Xét trường hơp 0 < m < 1

Q.

Gọi y là giá trị thực (giá trị chính xác) của đường thẳng tại x ở bước

thứ i +
1 là:
R.

y = m(xi + 1) + b

S.

Gọi d1 là khoảng cách từ y đến yi

T.

Gọi d2 là khoảng cách từ y đến yi + 1


U.
Ta có:
V. d1 = y -

yi = m(Xi + 1) + b - yi

7


W. d2

= yi +

1

- y = yi + 1 - [m(xi

+ 1) + b]

8


X.

Ta xét (d1 - d2):

Y.

d1 - d2 > 0 ^ d1 > d2 ^ yi.


Z.

Ngược lại: d1 - d2 < 0 ^ d1 < d2 ^ yi.

AA.

^ d1 - d2

AB.

= [m(Xi + 1) + b - yi] - [yi + 1 - m(Xi + 1) - b]

AC.

= m(xi + 1) + b - yi - yi - 1 + m(xi + 1) + b

AD.

= 2m(xi + 1) - 2yi + 2b - 1

+ 1

= yi. + 1
+ 1

= yi.

AE. Dễ thấy d1 - d2 tồn tại phép toán với số thực m = . Và để
tuân thủ
theo đúng ý tưởng thuật toán chỉ thực hiện các phép toán

trên số nguyên, ta khử phân số bằng cách nhân 2 vế với
dx:
AF.

Đặt Pi = dx(d1 - d2)

AG.

^ Pi = dx[2m(xi + 1) + 2b - 2yi - 1]

AH.

Thay m = vào phương trình trên ta được:
Pi = 2dyxi - 2dxyi + c với c

AI.
= 2dy + (2b - 1)dx
AJ.

Mặt khác dx > 0 với mọi trường hợp

AK.

^ dấu của Pi cùng dấu với d1 - d2

AL. ^

Pi > 0

AM.


Pi

^ yi

< 0 ^

+ 1

yi

+ 1

AN.

Ta lại có: Pi

AO.

Pi = 2dyxi - 2dxyi + c

+ 1

= 2dyxi

+ 1

=

yi


=

yi

- 2dxyi

+ 1

+ 1

+ c

9


AP.

^ Pi

+ 1

AQ.
(xi+ 1 - xi) = 1
AR.

Pi

+ 1


- Pi = 2dy(xi

+ 1

- xi) - 2dx(yi

+ 1

= 2dy - 2dx(yi

- yi
+ 1

- yi)với

= Pi + 2dy - 2dx(yi+1 - yi)

10


AS.

Nếu P1 < 0 ^ y±

AT.

Ngược lại Pi > 0 ^ y

AU.


Ta có: Pi = 2x1dy - 2y1dx + c

AV.

= 2x1dy - 2(X1 + b)dx + 2dy + (2b - 1)dx

+ 1

= y± ^ P1
+ 1

+ 1

= P1 + 2dy

= y i + 1 ^ Pi

+ 1

= Pi + 2(dy -

dx)

AW. = 2dy - dx
AX.

AY.
AZ. Hình 1.2
BA.quát
Giả

sử
khoảng
cách
từ
điểm
thực
ymột
so trị
với
imà
làtap.
Do
việc
xét nên
chọn
điểm
trên
hay
điểm
với
hơn,
mỗi
lần
x phải
tăng
đơn
vịcho
thêm
thì
khoảng

1
cách
p ,dưới
lại
cộng
giá
c ynào
đó.
Tuy
cách
khoảng
p
khơng
tăng
lên
một
cách
tính
nên
chúng
phải
đi nhiên,
tìm
cơng
thức
các
tổng
trường
hợp
đó

làgần
Ptuyến
?i +P,i1thực
i thêm
+
1 =điểm
.

11


• Kết quả thực nghiệm
A.
• Lưu đồ giải
thuật
BB.
BC.
BD.
BE.
BF.
BG.
BH.
BI.
BJ.
BK.
BL.
BM.
BN.
BO.
BP.

BQ.
BR.
BS.
BT.
BU.
BV.
BW.
B. Hì
nh
1.
3
BX.
BY
.
BZ.

12
12


CA.
CB. #include <winbgỉm.h>

1
2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#include<conio.h>
#define DE LAY 10
int oolơr = 2;

CC.


Vũìd Bresenhaiìi(int xl, int yl, int x2, int y2){
int Dx = abs(x2 - xl);
int Dy = abs(y2 - yl);
int p = 2*Dy - Dx;
ĩnt cl = 2*Dy;
int c2 = 2*(Dy-Dx);
int X = xl;
int y = yl;
int x_unit = 1, yunit = 1;

CD. putpixelỊx^y,colõr);
CE.
wliile(x J= x2){
CF. dèlay(DELAY);
CG.if (p<0) p += cl;
else{

CH.

p +=
y += y_unĩt;
CI. } '

CJ. X += x_unit;
putpixeltx, y,, color);

CK.

.}■
}.

int main(){
int xlJyl,x2Jy2;

31

32
33

34 I

CL.
int gd.grn^VGÁẤlAX; gd=DETECT;
irìitgráph(&gd ,íigm, NULL);
11 setbkcolor(4);
CM.

dslay(9000);
return 0;

Bresenham(5e,150J 300; 200);


CN.

}

CO.

Hình 1.4



CP.

CQ.

Hình 1.5


CR.
CS.
CT.

CV.

b. Thuật tốn Midpoint

• Thuật tốn
Xét 0 < hệ số góc < 1

CU.
CW. Hình 1.6

CX.

Thuật tốn Midpoint đưa ra cách chọn điểm Yi

+ 1

là yi hay yi


+ 1

bằng cách
so sánh điểm thực Q(xi

+ 1Z

y) với điểm Midpoint là trung điểm của S và P.

Nếu
điểm Q nằm dưới điểm Midpoint thì ta chọn điểm S là điểm vẽ tiếp theo. Ngược
lại,
nếu điểm Q nằm trên điểm Midpoint thì ta chọn P. Ta có dạng tổng quát của PT
đường thẳng:
CY. Ax + By + C = 0
CZ.

Với A = yo - y1; B = - (X2 - X1); C = X2y1 - X1y2

DA.

Đặt F(x, y) = Ax + By + C

DB.

Ta có nhận xét:

DC.

Vị trí tương đối của điểm Midpoint (x, y) với đường thẳng:


16


DD.

+ F(x, y) < 0 nếu (x, y) nằm phía trên đường thẳng

DE.

+ F(x, y) = 0 nếu (x, y) thuộc về đường thẳng

17


DF.

+ F(x, y) > 0 nếu (x, y) nằm phía dưới của đường thẳng

DG.

Lúc này việc chọn các điểm S, P ở trên được đưa về việc xét dấu của

DH.
DI.
DJ.
DK.

Pi


= pi
+ 2Dy - 2Dx nếu pi >0 do ta chọn yi+

+ 1

1

= yi + 1

Ta tính giá trị P1 ứng với điểm ban đầu (x1z y1) với nhận xét rằng

điểm
DL. (x1z y1) là điểm thuộc đường thẳng, tức là có Ax1 + By1 + C = 0
DM.

P1 = 2F(X1 + 1, y1 + ) = 2[A(X1 + 1) + B(y1 + ) + C]

DN.

= P1 = 2(Ax1 + By1 + C) + 2A + B

DO.

= P1 = 2A + B

DP.

= P1 = 2Dy - Dx

DQ.

như đã
nói ở trên.
DR.
DS.

Ta thấy kết quả của thuật tốn Midpoint tương tự thuật tốn Bresenham

• Lưu đồ thuật toán
Giống của thuật toán Bresenham

18


DU.

DT.
Hình 1.7

19


1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

• Kết quả thử nghiệm

DV.
DW. #include<iostream>
DX. #include<winbgim. h>
DY. #include<math.h>
DZ. using namespace std;
EA. void mỉdpoint(ỉnt xl.int yl,int X2, int y2,int color){
EB.
//Truông hop 0int a,b,pi,x,y,p;

EC.
a=y2-ýl,
ED.
b=-(x2-xl);
EE.
y=;
EF.
x=xl;
EG.
putpixel(x,y,color); //Ve diem pixel dau tien
EH.
p=2*a+b; //tinh vi tri tuong doi cua dỉem Midpoỉnt so voi duong thang
EI. while(x < x2){
if(p < 0)1

EJ.
EK. }elsé{
EL.
EM.
}

X++;

p+«2*a; // ta chon chon diem yi
y++;
p+=2*(a+b);//ta chon diem yỉ +1

EN.

cout<<"Pixel (x,y) midpoỉnt = ("<putpixel(x,y,coĩór);

EO.
EP.

delay(10);

}

EQ. int main(){
ER.
initwindow(800,600);
ES.
//khoi tao wỉndow có chieu rong x=400 và chieu cao y = 500
setwỉndowtitle("Thuat toan Line Hidpoint");

ET.
//thiet lap tieu de cho windows
mỉdpoint(10,10,400,400,15);

EU.

EV. }
EW.
EX.
EY.
EZ.
FA.
FB.

getch();

Hình 1.8

Hình
1.9
20


• Kết quả thử nghiệm
FC.
FD.
FE.
FF.
FG.
FH.

Hình
1.9
21



2. Vẽ đường trịn
FI.

a. Thuật tốn Bressenham

FJ.• Thuật tốn
FK.

Giả sử (xi, yi) đã vẽ được, điểm kế tiếp là (xi + 1, yi) hoặc (xi +1, yi -1)

FL.
FN.
FO.

FM. Hình 1.10
Từ phương trình: X2 + y2 = R2 ta tính được giá trị y thực ứng với

Xi + 1
là:
FP.

y2 = R2 - (xi + 1)2

FQ.
FR.

Đặt: di = yi2 - y2 = yi2 - R2 + (Xi + 1)2
d2 = y2 - (yi - 1)2 = R2 - (Xi + 1)2 - (yi - 1)2

FS.

Suy ra:
FT. Pi = d1 - d2 = 2(Xi + 1)2 + yi2 + (yi - 1)2 - 2R2 (2)
FU.

^ Pi

FV.
)

Từ (2) và (3) ta có: pi + 1 - pi = 4Xi + 6 + 2(y2i

+ 1

= 2(Xi + 1 + 1)2 + y2i+1 + (yi

+ 1

- 1)2 - 2R2

(3)
yi2

FW. - 2(yi

+ 1

+ 1

-


- yi)

22


FX.

^ Pi

+ 1

= Pi + 4Xi + 6 + 2(y2i

+ 1

- yi2 ) - 2(yi

+ 1

-

yi)
FY. (4)

23


FZ.
GA.


Nếu Pi.

< 0: chọn y±

(4)

^ pi + 1 = pi + 4xi

+ 6

Nếu Pi

> 0: chọn yi

1

- 1

(4) ^ Pi

+ 1

1

+

+

= Pi +


= y±
= yi

4(Xi -

GB. y±) + 10. Ta chọn điểm đầu tiên cần vẽ (0, R), theo (2) ta có: P1 =
3 2R
GC.

Tóm lại: Ta có thuật tốn vẽ đường trịn:

• Bước 1: Chọn điểm đầu tiên cần vẽ (x1z y1) = (0, R)
• Bước 2: Tính P đầu tiên: P1 = 3 - 2R Nếu P < 0: chọn điểm kế tiếp là
(xi +1, yi). Ngược lại chọn niểm (xi + 1,yi - 1)
• Bước 3: x:=x + 1, tính lại P: Nếu Pi < 0: Pi

+ 1

= Pi + 4xi + 6.

Ngược lại: pi + 1 = pi + 4(xi - yi) + 10 Khi đó: Nếu pi + 1 < 0:
chọn
điểm kế tiếp là(xi + 1, yi + 1). Ngược lại chọn điểm (xi + 1, yi + 1 -1)
GD.
Bước 4: Lặp lại bước 3 cho đến khi x = y.

24


• Lưu đồ giải thuật


GF.

GE.
Hình 1.11

25


×