Thuật toán Breshenham
Giả sử vừa vẽ điểm tại (xi, yi), bây giờ phải xác định điểm sẽ vẽ là một trong 8 pixel liền kề: (xi+1, yi), (xi-1, yi), (xi, yi-1), (xi, yi+1)…
Hình dạng đoạn thẳng phụ thuộc vào các giá trị dx và dy
◦dx=0 -> đ/thẳng song song với trục y
◦dy=0 -> đ/thẳng song song với trục x
◦dx>0 -> tọa độ x biến thiên tăng dần
◦dx<0 -> tọa độ x biến thiên giảm dần
◦Xét tương tự đối với dy
◦Nếu abs(dx)>abs(dy): y=f(x)
◦Nếu abs(dx)<abs(dy): x=f(y)
cài đặt:
void lineBres (int x1, int y1, int x2, int y2)
{
int Dx, Dy, p, Const1, Const2;
int x, y;
Dx = x2 - x1;
Dy = y2 - y1;
p = 2*Dy – Dx;
Const1 = 2*Dy;
Const2 = 2*(Dy-Dx);
x = x1;
y = y1;
putpixel(x, y, Color);
for(i=x1; i<=x2; i++)
{
if (p<0)
p += Const1;
else
{
p += Const2;
y++;
}
x++;
putpixel(x, y, Color);
}
nhận xét:
Thuật toán chỉ tính toán với số nguyên
Nhân 2 ~ dịch trái
® tăng tốc độ đáng kể so với DDA
Cho kết quả tương tự DDA
Chú ý cài đặt vẽ đoạn thẳng với hệ số góc bất kỳ
Bạn đang đọc truyện trên: Truyen247.Pro