Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

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

Tags: