Top Banner
Giáoviênphụtráchmônhọc: NguyễnHoàiAnh KhoaCôngnghệthôngtin -HVKTQS
24

Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Nov 03, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Giáo viên phụ trách môn học: Nguyễn Hoài AnhKhoa Công nghệ thông tin - HVKTQS

Page 2: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán vẽ đường thẳng� Thuật toán vẽ đường tròn� Thuật toán vẽ Elip

Page 3: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng
Page 4: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Ý tưởng� Giả sử tọa độ nguyên các điểm sau khi xấp xỉ đối

tượng thực lần lượt là (xi,yi) với i=0,... vẽ các điểmnày chúng ta sẽ được một đường xấp xỉ của đốinày chúng ta sẽ được một đường xấp xỉ của đốitượng cần vẽ.

� Giả sử đã biết được (xi,yi) là tọa độ nguyên xácđịnh ở bước thứ i, điểm nguyên tiếp theo (xi+1,yi+1) sẽ được xác định như thế nào?

Page 5: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Ý tưởng� Nhận xét▪ Để đối tượng hiển thị trên lưới nguyên được liền nét, các

điểm mà (xi+1,yi+1) có thể chọn chỉ là một trong tám điểmđiểm mà (xi+1,yi+1) có thể chọn chỉ là một trong tám điểmđược đánh số từ 1 đến 8

▪ Giải thích: điểm đen chính là (xi,yi).

▪ Nói cách khác : (xi+1,yi+1) = (xi+/-1,yi+/-1).

Page 6: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán� Giả thiết 0<m<1 và x2>x1 (Dx>0)� Với các đoạn thẳng dạng này, nếu (xi,yi) là điểm đã xác

định được ở bước thứ i

� thì điểm cần chọn (xi+1,yi+1) ở bước thứ i+1 sẽ là mộttrong hai trường hợp 1 hoặc 2

� Tại bước i+1 ta xác định được: xi+1 = xi+1 và yi+1 = yi hoặcyi+1. Vấn đề còn lại là cách chọn một trong hai điểmtrên như thế nào để có thể tối ưu về mặt tốc độ.

Page 7: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán DDA (Digital Differential Analyzer)

� Việc quyết định chọn yi+1 là yi hay yi+1, dựa vàophương trình của đoạn thẳng y=mx+b

� Tính y rồi làm tròn số và gán giá trị đó cho yi+1. i+1

� Như vậy

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

Page 8: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Sơ đồ khối thuật toán DDA

Page 9: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Cài đặt thuật toán DDA

Procedure DDA ( x1, y1, x2, y2, color : integer ); Var dx, dy, step : integer; X_inc, y_inc , x, y : real ;

Begin dx:=x2-x1;

dy:=y2-y1; if abs(dx)>abs(dy) then steps:=abs(dx) else steps:=abs(dy);

x_inc:=dx/steps; x_inc:=dx/steps; y_inc:=dy/steps; x:=x1; y:=y1;

putpixel(round(x),round(y), color); for k:=1 to steps do

begin x:=x+x_inc; y:=y+y_inc; putpi xel(round(x),round(y), color);

end; end;

Page 10: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán Bresenham

� Đưa ra cách chọn yi+1 là yi hay yi+1 theo một hướngkhác sao cho có thể tối ưu hóa về mặt tốc độ so vớithuật toán DDA. thuật toán DDA.

� Vấn đề mấu chốt ở đây là làm thế nào để hạn chế tốiđa các phép toán trên số thực trong thuật toán.

Page 11: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Sơ đồ khối thuật toán Bresenham

Page 12: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Cài đặt thuật toán Bresenham

Procedure Bres_Line (x1,y1,x2,y2: integer); Var dx, dy, x, y, P, const1, const2 : integer;

Begin dx : = x2- x1; dy : = y2- y1; P : = 2*dy - dx; Const1 : = 2*dy ; const2: = 2*(dy - dx) ; x:= x1; y:=y1; Putpixel ( x, y, Color);

while (x < x -2 ) do begin begin

x : = x +1 ; if (P < 0) then P : = P + const1

else begin y : = y+1 ;

P : = P + const2end ;

putpixel (x, y, color) ; end ;

End ;

Page 13: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Trong hệ tọa độ Decac. Phương trình đườngtròn có dạng: � Với tâm O(0,0): x2 + y2 = R2.

� Với tâm C(x ,y ): (x-x )2 + (y-y )2 = R2� Với tâm C(xc,yc): (x-xc)2 + (y-yc)2 = R2

� Trong hệ tọa độ cực

Page 14: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Do tính đối xứng của đường tròn C nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng qua 2 trục tọa độ và 2 đường phân giác thì ta vẽ được cả đường tròn. giác thì ta vẽ được cả đường tròn.

Page 15: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Ý tưởng

Page 16: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Cài đặt thuật toán vẽ đường tròn

Procedure Circle (xc, yc, R : integer) ; Var x, y : integer ; Procedure DOIXUNG; Begin

putpixel (xc + x , yc +y, color) ;

putpixel (xc - x , yc + y, color) ; putpixel (xc + x , yc - y, color) ;

putpixel (xc - x , yc- y, color) ; putpixel (xc + y , yc + x, color) ;

putpixel (xc - y , yc + x, color) ; putpixel (xc - y , yc + x, color) ;

putpixel (xc + y , yc - x, color) ; putpixel (xc - y , yc - x, color) ;

End ;

Begin For x : = 0 to round(R*Sqrt(2)/2) do

Begin

y : = round(Sqrt(R*R - x*x)) ;

DOIXUNG; End ;

End ;

Page 17: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán MidPoint (xét điểm giữa)

� Thuật toán MidPoint đưa ra cách chọn yi+1 là yi hay yi+1 bằng cách so sánh điểm thực Q(xi+1,y)

� với điểm MidPoint là trung điểm của S và P theo� với điểm MidPoint là trung điểm của S và P theonguyên tắc:▪ Nếu điểm Q nằm dưới điểm MidPoint, ta chọn S.

▪ Ngược lại nếu điểm Q nằm trên điểm MidPoint ta chọn P.

Page 18: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán MidPoint (xét điểm giữa)

Page 19: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Sơ đồ khối thuật toán MidPoint

Page 20: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Cài đặt thuật toán MidPoint

Procedure DTR(xc, yc, r, mau : integer); var x, y, p : integer ; begin

x:=0 ; y:=r;

p:=1 - r; while ( y > x) do

begin doi_xung;

if (p<0) then p:=p+2*x+3

else begin else begin p:=p+2*(x-y)+5 ; y:=y-1;

end;

x:=x+1; end; {while}

end;

Page 21: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Thuật toán Bresenham

� Tương tự thuật toán vẽ đường thẳng, các vị trí ứng với các tọa độ nguyên nằm trên đường tròn có thể tính được bằng cách xác định 1 trong 2có thể tính được bằng cách xác định 1 trong 2pixel gần nhất với đường tròn thực hơn trong mỗi bước

Page 22: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

Cài đặt thuật toán Bresenham

Procedure DTR _BRES (xc,yc,r,mau : integer); var x ,y ,p :integer; begin

x :=0 ; y :=r; p := 3 – 2 * r ; while (x <y) do

begin doi_ xung ; doi_ xung ;

if (p <0) then p := p + 4* x + 6

else begin

p := p + 4 * (x -y ) + 1 0 ;

y := y -1 ; end ;

x :=x + 1 ;

end ;{w h ile} end ;

Page 23: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Xét elip có tâm tại gốc tọa độ, bán kính trục X làa, bán kính trụcY là b. Phương trình elip có dạng:

1

22

=+yx

� b2x2+a2y2 – a2b2 =0 = F(x,y)� Do elip đối xứng nên chỉ cần vẽ cung ¼, các cung

còn lại lấy đối xứng qua các trục X vàY.

122

=+

ba

Page 24: Giáoviênphụtráchmônhọc: NguyễnHoàiAnh …fit.mta.edu.vn/files/FileMonHoc/Bai3_Veduong.pdf · Tươ ng tự thu ật toán vẽ đườ ng th ẳng, các vị trí ứng

� Triển khai các thuật toán trên ngôn ngữ lập trình và môi trường đồ họa phù hợp