1. Trang chủ
  2. » Công Nghệ Thông Tin

đề thi kỹ thuật đồ họa

41 621 0

Đ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 41
Dung lượng 1,08 MB

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

Nội dung

Do tính đối xứng của đường tròn, nên ta chỉ cần vẽ cung I, các cung còn lại đều suy ra từ cung I.Quan sát trên hình vẽ, ta thấy ở cung I, x tăng nhanh hơn y, nên ta dùng phương trình...

Trang 1

ĐỀ THI CÓ 2 CÂU ĐƯỢC CHỌN TRONG 2 PHẦN

MỖI CÂU 5 ĐIỂM SINH VIÊN KHÔNG ĐƯỢC XEM TÀI LIỆU

Ta phân biệt các trường hợp:

Đường ngang và x1≤x2 hoặc x1>x2

Đường dọc và y1≤y2 hoặc y1>y2

Trị tuyệt đối hệ số góc |m|≤1 và x1≤x2 hoặc x1>x2

Trị tuyệt đối hệ số góc |m|>1 và y1≤y2 hoặc y1> y2

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

1

2 (x x ) y

x x

y y

1 2

x x

y y m

Trang 2

for (x=x1; x>=x2; x ) {

y = Round(m*x+b);

SetPoint(hdc,x,y,Color);

} else {

for (y=y1; y>=y2; y ) {

x = Round(m*y+b);

SetPoint(hdc,x,y,Color);

} }

Trang 3

Do tính đối xứng của đường tròn, nên ta chỉ cần vẽ cung I, các cung còn lại đều suy ra từ cung I.

Quan sát trên hình vẽ, ta thấy ở cung I, x tăng nhanh hơn y, nên ta dùng phương trình

Trang 4

=+

b

y a

x

ra chính giữa màn hình

Đáp án:

Ta có phương trình của ellipse là 22 + 22 =1

b

y a x

trình ta cho x chạy rồi tính y.

Cung II có y tăng nhanh hơn x, nên ta dùng phương trình b2 y2

Trang 5

Để xác định được điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

a

bx

y

2 2

Trang 6

Câu 4: Xây dựng và cài đặt thuật toán vẽ parabola

a

x y

2

= có a dương ra chính giữa màn

hình

Đáp án:

Quan sát trên đồ thị, ta thấy

Cung I có x tăng nhanh hơn y nên ta dùng phương trình

a

x y

2

= , tức là khi lập trình ta

cho x chạy rồi tính y.

Cung II có y tăng nhanh hơn x nên ta dùng phương trình x= ay , tức là khi lập trình ta

cho y chạy rồi tính x.

Để xác định được điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

Trang 8

Quan sát trên đồ thị, ta nhận thấy:

Cung I có x tăng hơn y nên ta dùng phương trình

N

x A

x arcsin

2π , tức là khi lập trình

ta cho y chạy rồi tính x.

Để xác định được điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

Như vậy ta chỉ cần vẽ cung I và II, các cung còn lại lấy đối xứng là được

int Round( double a)

{

Trang 9

return ( int )(a+0.5);

Câu 5: Xây dựng và cài đặt thuật toán DDA (Digital Differential Analyzer)

vẽ đoạn thẳng đi qua hai điểm (x1,y1) và (x2,y2) Giới hạn chỉ xét hệ số góc 0<m≤1

x1 <x2

Đáp án:

Trang 10

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

1 2

x x

y y m

k k

x x

y y

x x

y y

k k k k

+

1 1

1

nên thuật toán có tên là bộ phân tích sai phân

int Round( double a)

Trang 11

else if (y1 == y2)

else

while (y>y2) {

Trang 12

1 1

2

1

y y

y y x x

x x

1 2

x x

y y m

Trang 13

Mục đích của thuật toán Bresenham là dùng toàn số nguyên để tính toán cho nhanh.Thuật toán gồm 3 bước:

d

1222

d

12)(

22

1 2

x x

y y m

Trang 14

dx dy dxy dyx

dxy dyx

Nhắc lại p k =ddx=2dyx k −2dxy k −2dyx1 +2dxy1 +2dydx

Suy ra p k+1 =2dyx k+1−2dxy k+1 −2dyx1+2dyx1+2dydx

Do x k+1 =x k +1, nên

)(

Bước 3: Tính p ban đầu

Dùng phương trình p k =ddx=2dyx k −2dxy k −2dyx1+2dxy1 +2dydx

Tại điểm ban đầu thì (x k,y k)=(x1,y1) nên

dx dy dxy dyx

dxy dyx

dx dy

Trang 15

Đáp án:

Do tính đối xứng của đường tròn, nên ta chỉ cần vẽ cung 8, các cung còn lại lấy đối

xứng là được Cung cần vẽ có x tăng nhanh hơn y, nên ta dùng phương trình y= f (x), hay y= r2 −x2 , tức là khi lập trình ta cho x chạy rồi tính y.

Bước k ta có (x k,y k)

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k −1

Mục đích của thuật toán Bresenham là dùng toàn số nguyên để tính toán cho nhanh.Thuật toán gồm 3 bước:

Bước 1: Tính d và 1 d2

)1(1

Trang 16

Ta nhận thấy d có đại lượng 2

1

2 +

x k

r là số thực, nên d là số thực do đó ta phải chuyển

thành số nguyên, nếu không chuyển được thành số nguyên thì ta dùng phương pháp bình thường để vẽ đường tròn

Đặt p1 = y k2+1−(y k −1)2

2 1

2 1

Trang 17

ra chínhgiữa màn hình bằng thuật toán Bresenham

Đáp án:

Trang 18

Quan sát trên đồ thị, ta thấy:

Cung I có x tăng nhanh hơn y, nên ta dùng phương trình a2 x2

a

b

y = − , tức là khi lập

trình ta cho x chạy rồi tính y.

Cung II có y tăng nhanh hơn x, nên ta dùng phương trình b2 y2

b

a

x= − , tức là khi lập

trình ta cho y chạy rồi tính x.

Để xác định được điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

a

bx

y

2 2

Như vậy ta chỉ cần vẽ cung I và II, các cung còn lại lấy đối xứng là được

Thuật toán Bresenham gồm 3 bước:

Xét cung I:

Bước k ta có (x k,y k)

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k −1Mục đích của thuật toán Bresenham là dùng toàn số nguyên để tính toán cho nhanh

Trang 19

Bước 1: Tính d và 1 d2

)1(1

2 1

a

b d

Ta nhận thấy d có đại lượng a2 −x k2+1

2 2 2

2 2 2

2 2

2 2 2 2 2

2 2 2

1 2 2

2 2

1 2b (x 1) 4b (x 1) 2a y 2a y 2a b a 2b

2 1

2 2

2 1 2 2

1 p 4b x 2a (y y ) 2a (y y ) 6b

Nếu p k <0 thì y k+1 = y k −1

2 2 2

1 p 4b x 6b

Bước 3: Tính p ban đầu

Trang 21

y= 2 với a nguyên dương ra chính

giữa màn hình dùng thuật toán Bresenham

Đáp án:

Quan sát trên đồ thị, ta thấy

Cung I có x tăng nhanh hơn y nên ta dùng phương trình

a

x

y= 2 , tức là khi lập trình ta

cho x chạy rồi tính y.

Cung II có y tăng nhanh hơn x nên ta dùng phương trình x= ay , tức là khi lập trình ta

cho y chạy rồi tính x.

Để xác định được điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

Trang 22

Như vậy ta chỉ cần vẽ cung I và II, nhánh còn lại của parabola lấy đối xứng là được.Mục đích của thuật toán Bresenham là dùng toàn số nguyên để tính toán cho nhanh.

x

k

2 2

1 1

)1( +

=

+

nên d là số thực do đó ta phải chuyển thành số nguyên, nếu không chuyển được thành số

nguyên thì ta dùng phương pháp bình thường để vẽ

Nhân 2 vế của d cho a.

Đặt p k =da=2(x k +1)2 −2ay ka

22

)1(4)1(

Trang 23

Xét cung II:

Ta có y tăng nhanh hơn x.

Bước k ta có (x k,y k)

Bước k+1 ta có (x k+1,y k+1)=(x k+1,y k +1), trong đó x k+1 =x k hoặc x k+1 = x k +1

Thuật toán Bresenham gồm 3 bước:

Bước 1: Tính d và 1 d2

1

1 =x k +1−x k+d

nên d là số thực do đó ta phải chuyển thành số nguyên, nếu không chuyển được thành số

nguyên thì ta dùng phương pháp bình thường để vẽ

Đặt p1 =(x k +1)2 −x k2+1

2 2 1

2 x k x k

2 1

2 2

1

+Nếu p k <0 thì x k+1 = x k +1, hay p k+1 = p k +4x k +4−2a

Trang 25

Do giới hạn hệ số góc 0<m≤1 và x1 < x2, nên ở:

Bước k ta có (x k,y k)

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k +1

Ta dùng phương trình tổng quát của đường thẳng F(x,y)= Ax+By+C =0

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

Đặt A= y2 −y1, B=−(x2 −x1) và C=−x1(y2 −y1)+y1(x2 −x1)

Ta được phương trình Ax+By+C =0

Ta chọn phương trình đơn giản nhất để dễ nêu nhận xét, chẳng hạn chọn (x1,y1)=(0,0)

và (x2,y2)=(3,1), khi đó ta được phương trình F(x,y)= x−3y=0.

Nhận xét: F(x,y)<0 thì điểm ( y x, ) nằm phía trên đường thẳng.

0),(x y

F thì điểm ( y x, ) nằm trùng hay nằm phía dưới đường thẳng.Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +1,y k +21)

C y

B x

A M

F( )= ( k +1)+ ( k + 21)+

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 21 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =2F(M)=2Ax k +2By k +2A+B+2C

Trang 26

Rõ ràng p nguyên (A, B, C nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm phía trên đường thẳng, hay y k+1 = y k

Nếu p k ≥0 thì điểm M nằm trùng hay nằm phía dưới đường thẳng, hay

Trang 27

Bước k+1 ta có (x k+1,y k+1)=(x k −1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k −1

Ta dùng phương trình tổng quát của đường thẳng F(x,y)= Ax+By+C =0

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

Đặt A= y2 −y1, B=−(x2 −x1) và C=−x1(y2 −y1)+y1(x2 −x1)

Ta được phương trình Ax+By+C =0

Ta chọn trường hợp đơn giản để dễ nêu nhận xét, chẳng hạn chọn (x1,y1)=(3,3) và

)2

(x2 y2 = , khi đó ta được phương trình F(x,y)=−x+3y−6=0

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm phía dưới đường thẳng.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hoặc nằm phía trên đường thẳngThuật toán MidPoint gồm 3 bước:

Trang 28

Bước 1: Tính F (M) với M =(x k −1,y k −21)

C y

B x

A M

F( )= ( k −1)+ ( k −21)+

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 21 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =2F(M)=2Ax k +2By k −2AB+2C

Rõ ràng p nguyên (A, B, C nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm phía dưới đường thẳng, hay y k+1 = y k

Nếu p k ≥0 thì điểm M nằm trùng hay nằm phía trên đường thẳng, hay

Trang 29

Bước k+1 ta có (x k+1,y k+1)=(x k+1,y k +1), trong đó x k+1 =x k hoặc x k+1 = x k +1

Ta dùng phương trình tổng quát của đường thẳng F(x,y)= Ax+By+C =0

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

Đặt A= y2 −y1, B=−(x2 −x1) và C=−x1(y2 −y1)+y1(x2 −x1)

Trang 30

Ta được phương trình Ax+By+C =0

Ta chọn phương trình đơn giản nhất để dễ nêu nhận xét, chẳng hạn chọn (x1,y1)=(0,0)

và (x2,y2)=(1,3), khi đó ta được phương trình F(x,y)=3xy=0.

Nhận xét: F(x,y)<0 thì điểm ( y x, ) nằm bên trái đường thẳng.

0),(x y

F thì điểm ( y x, ) nằm trùng hay nằm bên phải đường thẳng.

Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +21,y k +1)

C y

B x

A M

F( )= ( k +21)+ ( k +1)+

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 21 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =2F(M)=2Ax k +2By k +A+2B+2C

Rõ ràng p nguyên (A, B, C nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên trái đường thẳng, hay x k+1 =x k +1

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên phải đường thẳng, hay

Trang 31

Bước k+1 ta có (x k+1,y k+1)=(x k+1,y k −1), trong đó x k+1 =x k hoặc x k+1 =x k −1

Ta dùng phương trình tổng quát của đường thẳng F(x,y)= Ax+By+C =0

Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là

1 2

1 1

2

1

y y

y y x x

x x

Đặt A= y2 −y1, B=−(x2 −x1) và C=−x1(y2 −y1)+y1(x2 −x1)

Ta được phương trình Ax+By+C =0

Ta chọn trường hợp đơn giản để dễ nêu nhận xét, chẳng hạn chọn (x1,y1)=(3,3) và

)0

(x2 y2 = , khi đó ta được phương trình F(x,y)=−3x+y+6=0.

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm bên phải đường thẳng.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hoặc nằm bên trái đường thẳngThuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k −21,y k −1)

C y

B x

A M

F( )= ( k −21)+ ( k −1)+

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 21 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Trang 32

Đặt p k =2F(M)=2Ax k +2By kA−2B+2C

Rõ ràng p nguyên (A, B, C nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên phải đường thẳng, hay x k+1 = x k −1

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên trái đường thẳng, hay

Trang 33

Câu 14: Xây dựng và cài đặt thuật toán vẽ đường tròn có phương trình là x2 +y2 =r2 rachính giữa màn hình bằng thuật toán MidPoint

Đáp án:

Do tính đối xứng của đường tròn, nên ta chỉ cần vẽ cung 8, các cung còn lại lấy đối

xứng là được Cung cần vẽ có x tăng nhanh hơn y, nên ở

Bước k ta có (x k,y k)

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k −1

Ta dùng phương trình tổng quát của đường tròn F(x,y)=x2 +y2 −r2 =0

Ta chọn trường hợp đơn giản để dễ nêu nhận xét, chẳng hạn chọn r =3

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm bên trong đường tròn.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hay nằm bên ngoài đường tròn.Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +1,y k −21)

2 2 2 1

)1()

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 41 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =4F(M)=4x k2 +8x k +4y k2 −4y k +5−4r2

Rõ ràng p nguyên (r nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên trong đường tròn, hay y k+1 = y k

Trang 34

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên ngoài đường tròn, hay

Trang 35

ra chính giữa màn hình bằng thuật toán MidPoint

Đáp án:

Quan sát trên đồ thị, ta thấy:

Cung I có x tăng nhanh hơn y còn cung II có y tăng nhanh hơn x nên để xác định được

điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình a2 x2

a

bx

y

2 2

Trang 36

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k −1

Ta dùng phương trình tổng quát của đường tròn F(x,y)=b2x2 +a2y2 −a2b2 =0

Ta chọn trường hợp đơn giản để dễ nêu nhận xét, chẳng hạn chọn b=3 và a=2, khi đó

ta được phương trình F(x,y)=9x2 +4y2 −36=0

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm bên trong ellipse.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hay nằm bên ngoài ellipse.

Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +1,y k −21)

2 2 2 2 1 2

Đặt p k =4F(M)=4b2x k2 +8b2x k +4a2y k2 −4a2y k +a2 +4b2 −4a2b2

Rõ ràng p nguyên (a, b nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên trong ellipse, hay y k+1 = y k

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên ngoài ellipse, hay

1

2 1 2 2

2 1 2 2

Tại điểm ban đầu thì (x k,y k)=(0,b) nên p=−4a2b+a2 +4b2

Thực hiện tương tự cho cung II

Trang 37

= với a nguyên dương ra chính

giữa màn hình dùng thuật toán MidPoint

Đáp án:

Trang 38

Quan sát trên đồ thị, ta thấy

Cung I có x tăng nhanh hơn y, còn cung II có y tăng nhanh hơn x nên để xác định được

điểm chuyển tiếp A(x A,y A), ta cho đạo hàm cấp một của phương trình

a

x

y= 2 bằng 1.1

Bước k+1 ta có (x k+1,y k+1)=(x k +1,y k+1), trong đó y k+1 = y k hoặc y k+1 = y k +1

Ta dùng phương trình tổng quát của parabola F(x,y)=x2 −ay=0

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm bên trong parabola.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hay nằm bên ngoài parabola.Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +1,y k +21)

)(

)1()(M = x k + 2 −a y k +12

F

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 21 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =2F(M)=2x k2 +4x k −2ay ka+2

Rõ ràng p nguyên (a nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên trong parabola, hay y k+1 = y k

Trang 39

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên ngoài parabola, hay

Bước k+1 ta có (x k+1,y k+1)=(x k+1,y k +1), trong đó x k+1 =x k hoặc x k+1 = x k +1

Ta dùng phương trình tổng quát của parabola F(x,y)=x2 −ay=0

Nhận xét: nếu F(x,y)<0 thì điểm ( y x, ) nằm bên trong parabola.

nếu F(x,y)≥0 thì điểm ( y x, ) nằm trùng hay nằm bên ngoài parabola.Thuật toán MidPoint gồm 3 bước:

Bước 1: Tính F (M) với M =(x k +21,y k +1)

)1()()

Mục đích của thuật toán MidPoint là dùng số nguyên để tính cho nhanh Ta thấyF (M)cóđại lượng 41 nên F (M) là số thực Ta phải chuyển F (M) thành số nguyên nhưng nhận xét cũng giống như nhận xét về F (M).

Đặt p k =4F(M)=4x k2 +4x k −4ay k −4a+1

Rõ ràng p nguyên (a nguyên) k

Nhận xét: Nếu p k <0 thì điểm M nằm bên trong parabola, hay x k+1 =x k +1

Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên ngoài parabola, hay

Trang 40

Bước 3: Tính p ban đầu

ReleaseDC(hWnd,hdc);

return ;

}

Ngày đăng: 17/10/2014, 07:30

TỪ KHÓA LIÊN QUAN

w