Thuật toán trung điểm vẽ đường

Pitteway công bố năm 1967, Van Aken cải tiến 1984.

Giả sử ta đã chọn P để vẽ, xác định pixel tiếp theo tại E hay NE

◦Giao của đường thẳng với x=xp+1 tại Q, M là trung điểm của NE và E.

Ý tưởng:

M nằm phía nào của đường thẳng, nếu M phía trên đường thẳng thì chọn E, ngược lại chọn NE.

Nhiệm vụ: xác định M ở đâu

Phương trình đường thẳng: F(x,y)=ax+by+c

xét cho F(x,y) = 2(ax+by+c)

Giá trị hàm tại M: F(M) = F(xp+1, yp+1/2) = d

◦Nếu d>0, M nằm dưới đường thẳng ® chọn NE

◦Nếu d<0, M nằm phía trên ® chọn E

◦Nếu d=0, chọn E hay NE tuỳ ý

cài đặt:

void MidpointLine(int x1,y1,x2,y2,C)

{

Int dx = x2-x1, dy = y2-y1;

Int d = 2*dy-dx;

Int ∆E = 2*dy, ∆NE = 2*(dy-dx); x=x1;y=y1;

PutPixel(x,y,C);

while (x < x2) {

if (d<= 0) {

d += ∆E; x++

} else {

d += ∆NE;

x++; y++;

}

PutPixel(x,y,C);

}}

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: