Tìm kiếm
Latest topics
Giải thuật Bresenham
2 posters
bkiz :: Giáo Trình :: Đồ Họa Máy Tính
Trang 1 trong tổng số 1 trang
Giải thuật Bresenham
Xét đoạn thẳng với 0 < k < 1
Gọi (xi+1,y) là điểm thuộc đoạn thẳng, ta có y=k(xi+1)+b
d1 = y - yi = k(xi +1) + b - yi
d2 = yi+1 - y = yi + 1 - k(xi + 1) - b
- Nếu d1 <= d2 => yi+1 = yi
- Ngược lại d1 > d2 => yi+1 = yi +1
Đặt D = d1 - d2= 2k(xi + 1) - 2yi + 2b - 1
Có k=Δy/Δx
Đặt Pi = ΔxD = Δx (d1 - d2)
Pi = Δx(2Δy/Δx(xi +1)- 2yi +2b-1)
= 2Δyxi +2Δy -2Δxyi + 2bΔx -Δx
Ta tính bước tiếp:
Pi+1 = 2Δyxi+1 +2Δy -2Δxyi+1 + 2bΔx -Δx
Pi+1 - Pi = -2Δx(yi+1 -yi) + 2Δy(xi+1 -xi)
Có xi+1 =xi+1 nên:
Pi+1 - Pi = - 2Δx(yi+1 -yi) + 2Δy = 2Δy - 2Δx(yi+1 -yi)
Nếu Pi <= 0 thì yi
+1 = yi
Pi+1 = Pi + 2Δy
Nếu Pi > 0 thì yi+1 = yi +1
Pi+1 = Pi + 2Δy - 2Δx
Tính giá trị đầu: P1?
P1 = Δx(d1 - d2)
= Δx(2Δy/Δx(x1 +1)- 2y1 +2b-1)
= 2Δyx1 +2Δy -2Δxy1 + 2bΔx -Δx
Có y1=kx1 + b = Δy/Δx x1 +b
P1 = 2Δyx1 +2Δy -2Δx((Δy/Δx)x1 +b) + 2bΔx -Δx
= 2Δyx1 +2Δy -2Δyx1 - 2bΔx + 2bΔx -Δx
P1 = 2Δy - Δx
cài đặt Chương trình
/*Thuat toan Bresenham ve dthang (0<k<1) */
void Bre_line(int x1, int y1, int x2, int y2, int c)
{int x, y, dx, dy,p,const1,const2;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
p = 2*dy - dx;
const1 = 2*dy;
const2 = 2*(dy-dx);
for (x=x1; x<=x2; x++) {
putpixel(x, y, c);
if (p < 0)
p += const1; // p=p + 2dy
else {
p +=const2; //p=p+2dy-2dx
y++;
}
}
}
Gọi (xi+1,y) là điểm thuộc đoạn thẳng, ta có y=k(xi+1)+b
d1 = y - yi = k(xi +1) + b - yi
d2 = yi+1 - y = yi + 1 - k(xi + 1) - b
- Nếu d1 <= d2 => yi+1 = yi
- Ngược lại d1 > d2 => yi+1 = yi +1
Đặt D = d1 - d2= 2k(xi + 1) - 2yi + 2b - 1
Có k=Δy/Δx
Đặt Pi = ΔxD = Δx (d1 - d2)
Pi = Δx(2Δy/Δx(xi +1)- 2yi +2b-1)
= 2Δyxi +2Δy -2Δxyi + 2bΔx -Δx
Ta tính bước tiếp:
Pi+1 = 2Δyxi+1 +2Δy -2Δxyi+1 + 2bΔx -Δx
Pi+1 - Pi = -2Δx(yi+1 -yi) + 2Δy(xi+1 -xi)
Có xi+1 =xi+1 nên:
Pi+1 - Pi = - 2Δx(yi+1 -yi) + 2Δy = 2Δy - 2Δx(yi+1 -yi)
Nếu Pi <= 0 thì yi
+1 = yi
Pi+1 = Pi + 2Δy
Nếu Pi > 0 thì yi+1 = yi +1
Pi+1 = Pi + 2Δy - 2Δx
Tính giá trị đầu: P1?
P1 = Δx(d1 - d2)
= Δx(2Δy/Δx(x1 +1)- 2y1 +2b-1)
= 2Δyx1 +2Δy -2Δxy1 + 2bΔx -Δx
Có y1=kx1 + b = Δy/Δx x1 +b
P1 = 2Δyx1 +2Δy -2Δx((Δy/Δx)x1 +b) + 2bΔx -Δx
= 2Δyx1 +2Δy -2Δyx1 - 2bΔx + 2bΔx -Δx
P1 = 2Δy - Δx
cài đặt Chương trình
/*Thuat toan Bresenham ve dthang (0<k<1) */
void Bre_line(int x1, int y1, int x2, int y2, int c)
{int x, y, dx, dy,p,const1,const2;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
p = 2*dy - dx;
const1 = 2*dy;
const2 = 2*(dy-dx);
for (x=x1; x<=x2; x++) {
putpixel(x, y, c);
if (p < 0)
p += const1; // p=p + 2dy
else {
p +=const2; //p=p+2dy-2dx
y++;
}
}
}
mọi người cho mình hỏi với trường hợp k>1 thì sẽ như thế nào không :D
mình đang thắc mắc các trường hợp k còn lại. nếu mình đặt d1 với d2 ngược nhau có được không vậy:D
hangme- Tổng số bài gửi : 1
Join date : 24/06/2013
Similar topics
» Giải thuật sinh đường tròn (Scan Converting Circles)(Bresenham)
» Cấu Trúc Dữ liệu Giải Thuật
» Giải thuật trung điểm-Midpoint
» Giải thuật sinh đường tròn Midpoint
» THUẬT TO ÁN PRIM
» Cấu Trúc Dữ liệu Giải Thuật
» Giải thuật trung điểm-Midpoint
» Giải thuật sinh đường tròn Midpoint
» THUẬT TO ÁN PRIM
bkiz :: Giáo Trình :: Đồ Họa Máy Tính
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Mon Jun 24, 2013 11:27 pm by hangme
» host facebook
Mon Apr 02, 2012 2:26 pm by Admin
» Cyberlink PowerDirector 9 key full
Thu Mar 29, 2012 5:00 pm by Admin
» PowerDirector 10 Ultra
Fri Mar 23, 2012 6:15 pm by Admin
» Mảng - Nhập mảng số nguyên, tính tổng phần tử dương, tìm số hoàn hảo, tìm max, min, sắp xếp từ lớn đến nhỏ, từ nhỏ đến lớn
Sun Mar 18, 2012 9:17 pm by Admin
» HTML+CSS Form đăng nhập
Tue Sep 13, 2011 10:38 pm by Admin
» HTML+javascript : Lịch Dương
Thu Sep 08, 2011 5:15 pm by Admin
» HTML+javascript : Đòng hồ điện tử
Thu Sep 08, 2011 5:06 pm by Admin
» HTML: Form Đăng nhập
Thu Sep 08, 2011 4:42 pm by Admin