Giải thuật trung điểm-Midpoint

Một phần của tài liệu Bài giảng Kỹ thuật đồ họa: Phần 1 (Trang 25 - 27)

Jack Bresenham 1965/Pitteway 1967, ỏp dụng cho việc sinh cỏc đƣờng thẳng và đƣờng trũn 1985. Xột trung điểm của đoạn AB (M)

Nếu M ở trờn đoạn thẳng AB thỡ chọn B cũn M ở dƣới đoạn thẳng AB chọn A

Cụng thức đơn giản hơn, tạo đƣợc cỏc điểm tƣơng tự nhƣ với Bresenham d = f(xi + 1, yi + 1/2) là trung điểm của đoạn AB

P > 0 Bắt đầu x = x1 ; y = y1; dx = x2 - x1; dy = y2 - y1; P = dx - 2dy; Putpixel (x ,y); x < x2 Kết thúc P = P - 2dy P = P - 2dy + 2dx y = y + 1 yes no No yes x = x + 1 p= p+2dy-2dx p=p+2dy x=x1;y=y1; dx=x2-x1; dy=y2-y1; p=2dy-dx ; p<=0

: Cỏc giải thuật sinh thực thể cơ sở

Hỡnh 2.7 Mụ tả giải thuật Midpoint

So sỏnh hay kiểm tra M sẽ đƣợc thay bằng việc xột giỏ trị d.

 d > 0 điểm B đƣợc chọn khi đú yi+1 = yi

 d < 0 điểm A đƣợc chọn khi đú yi+1 = yi + 1

Trƣờng hợp d = 0 chỳng ta cú thể chọn điểm bất kỳ hoặc A, hoặc B. Sử dụng phƣơng phỏp biểu diễn khụng tƣờng minh

f(x,y)= ax +by +c =0 (1) dx =x2-x1 dy =y2-y1 Biểu diễn tƣờng minh:

y= (dy/dx)x +B hay f(x,y)=0= xdy - ydx +Bdx (2) So sỏnh (1) và (2) ta cú a=dy, b=-dx và c= Bdx

Cú f(x,y)=0 với mọi (x,y) thuộc đƣờng thẳng Đặt di=f(xi+1,yi+1/2) = a(xi+1) +b(yi +1/2) +c

 Nếu chọn A (d<0) thỡ M sẽ tăng theo 2 hƣớng x,y di+1=f(xi+2,yi+3/2) = a(xi+2) +b(yi +3/2) +c di+1 – di = a+b Hay di+1 = di + dy - dx

 Nếu chọn B (d>0) thỡ M sẽ tăng theo x di+1=f(xi+2,yi+1/2) = a(xi+2) +b(yi +1/2) +c di+1 - di = a Hay di+1 = di + dy

Tớnh d1 ? d1 = f(x1+1,y1+1/2) = a(x1+1) +b(y1 +1/2) +c = ax1 +by1 +c +a +1/2 b = f(x1,y1) +a +b/2

Cú (x1,y1) là điểm bắt đầu, nằm trờn đoạn thẳng nờn f(x1,y1) = 0 Vậy d1 = a+ b/2 = dy - dx/2

A

B

d<0 d>0

: Cỏc giải thuật sinh thực thể cơ sở

Hỡnh 2.8 Sơ đồ khối giải thuật Midpiont cho đoạn thẳng

/* Thuat toan Midpoint de ve doan thang (0<k<1) */

void Mid_line(int x1, int y1, int x2, int y2, int c)

{ int x, y, dx, dy,d; y = y1; dx = x2 - x1; dy = y2 - y1; d= dy - dx/2; for (x=x1; x<=x2; x++) { putpixel(x, y, c); if (d <= 0) d = d + dy; else { y ++; d = d + dy - dx; } } }

Một phần của tài liệu Bài giảng Kỹ thuật đồ họa: Phần 1 (Trang 25 - 27)