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

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

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

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