thuật toán DDA dthg

Màu nền
Font chữ
Font size
Chiều cao dòng

Việc quyết định chọn là hay , dựa vào phương trình của đoạn thẳng

Nếu tính trực tiếp giá trị thực y ở mỗi bước từ phương trình thì phải cần một phép toán nhân và một phép toán cộng số thực.

Để cải thiện tốc độ, người ta tính giá trị thực của y ở mỗi bước theo cách sau để khử phép tính nhân trên số thực.

Nhận xét rằng:

ysau =mx(i+1)+b=m(xi+1)+b

ytrước =mxi+b

ysau = ytrước + m

cài đặt:

#define ROUND(a) ((int)(a+0.5))

void lineDDA (int xa, int ya, int xb, int yb)

{

int dx = xb - xa, dy = yb - ya, steps, k;

float x_inc, y_inc, x = xa, y = ya;

if (abs (dx) > abs (dy)) steps = abs (dx);

else steps = abs (dy);

x_inc = dx / (float) steps; x= x1;

y_inc = dy / (float) steps; y= y1;

PutPixel (ROUND(x), ROUND(y),C);

for (k=0; k<steps; k++)

{

x += x_inc; y += y_inc;

PutPixel (ROUND(x), ROUND(y),C);

}

}

Khử được phép nhân nhờ ytrước = ysau + m

Khi vẽ đoạn thẳng khá dài: Cộng dồn giá trị thực m vào y ® tích lũy sai số ® hàm làm tròn có kết quả sai ® xác định vị trí của điểm vẽ ra bị chệch hướng so với đường thẳng thực.

Vẫn hạn chế về mặt tốc độ do vẫn còn phép toán cộng số thực và làm tròn.

Bạn đang đọc truyện trên: Truyen2U.Pro