1. Trang chủ
  2. » Giáo án - Bài giảng

Thuật Toán Vẽ Đường Thẳng Và Đường Tròn

24 737 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 24
Dung lượng 1,71 MB
File đính kèm Bai3_Veduong.zip (2 MB)

Nội dung

I. Thuật toán độ nguyên xác Ý 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ểm này chúng ta sẽ được một đường xấp xỉ của đối tượ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? 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 đượ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) 

Trang 1

Giáo viên phụ trách môn học:

Nguyễn Hoài Anh

Khoa Công nghệ thông tin - HVKTQS

Trang 2

 Thuật toán vẽ đường thẳng

Trang 4

 Ý 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 đối

tượ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?

Trang 5

▪ 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).

Trang 6

 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ột

trong 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ặc

yi+1 Vấn đề còn lại là cách chọn một trong hai điểm

trên như thế nào để có thể tối ưu về mặt tốc độ

Trang 7

 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ào

phươ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+1i+1

 Như vậy

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

Trang 8

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

Trang 9

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

Trang 10

 Thuật toán Bresenham

 Đưa ra cách chọn yi+1 là yi hay yi+1 theo một hướng

khác sao cho có thể tối ưu hóa về mặt tốc độ so vớithuậ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

Trang 11

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

Trang 12

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

x : = x +1 ;

if (P < 0) then P : = P + const1 else

begin

y : = y+1 ;

P : = P + const2 end ;

putpixel (x, y, color) ; end ;

End ;

Trang 13

 Trong hệ tọa độ Decac Phương trình đường trò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

Trang 14

 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

Trang 15

 Ý tưởng

Trang 16

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) ; End ;

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

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

End ; End ;

Trang 17

 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 theo

nguyê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.

Trang 18

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

Trang 19

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

Trang 20

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

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

end;

x:=x+1;

end; {while}

end;

Trang 21

 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 2

pixel gần nhất với đường tròn thực hơn trong mỗi bước

Trang 22

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 ;

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 ;

Trang 23

 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

2 2

= + y

x

 b2x2+a2y2 – a2b2 =0 = F(x,y)

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

1

2

b a

Trang 24

 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

Ngày đăng: 31/03/2017, 23:28

TỪ KHÓA LIÊN QUAN

w