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 2for (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 3Do 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 6Câ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 8Quan 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 9return ( 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
và x1 <x2
Đáp án:
Trang 10Ta 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 11else if (y1 == y2)
else
while (y>y2) {
Trang 121 1
2
1
y y
y y x x
x x
1 2
x x
y y m
Trang 13Mụ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 14dx dy dxy dyx
dxy dyx
Nhắc lại p k =ddx=2dyx k −2dxy k −2dyx1 +2dxy1 +2dy−dx
Suy ra p k+1 =2dyx k+1−2dxy k+1 −2dyx1+2dyx1+2dy−dx
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 +2dy−dx
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 16Ta 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 17ra chínhgiữa màn hình bằng thuật toán Bresenham
Đáp án:
Trang 18Quan 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 19Bướ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 21y= 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 22Như 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 k −a
22
)1(4)1(
Trang 23Xé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 25Do 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 26Rõ 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 27Bướ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 28Bướ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
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 29Bướ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 30Ta đượ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)=3x− y=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 31Bướ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 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 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 33Câ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 34Nếu p k ≥0 thì điểm M nằm trùng hay nằm bên ngoài đường tròn, hay
Trang 35ra 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 36Bướ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 38Quan 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 k −a+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 39Nế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 40Bước 3: Tính p ban đầu
ReleaseDC(hWnd,hdc);
return ;
}