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