Bài giảng Đồ họa máy tính: Thuật toán Bresenham - Vẽ đường thẳng
lượt xem 43
download
Bài giảng Đồ họa máy tính: Thuật toán Bresenham - Vẽ đường thẳng có nội dung giới thiệu về thuật toán Bresenham, cài đặt thuật toán, chương trình thuật toán và bài tập. Tham khảo nội dung bài giảng để hiểu rõ hơn về các nội dung trên.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Đồ họa máy tính: Thuật toán Bresenham - Vẽ đường thẳng
- Thuật toán Bresenham vẽ đường thẳng 1
- Xét k
- Thuật toán Bresenham Giới thiệu: • Giả sử đường thẳng được xấp xỉ thành các điểm lần lượt là (xi,yi). Các điểm này có tọa độ nguyên và được hiển thị trên màn hình. • Bài toán đặt ra là nếu biết được tọa độ (xi,yi) của bước thứ i, thì điểm ở bước i+1 là (xi+1,yi+1) sẽ được xác định như thế nào. • Trong trường hợp hệ số góc 0
- Thuật toán Bresenham (tiếp) • Phương trình đường thẳng qua 2 điểm (x1, y1) và (x2, y2) là y=kx+m với m=Dy/Dx và m=y1-kx1. • Đặt d1=y-yi và d2=(yi+1)-y, do đó việc chọn tọa độ của yi+1 phụ thuộc vào d1 và d2 ( hay dấu của d1 - d2): – Nếu d1-d2
- Thuật toán Bresenham (tiếp) • d1 - d2 = (2y – 2yi – 1) là một số thực do chứa k • Xét pi = Dx (d1 - d2) = Dx (2y - 2yi - 1) = 2Dy xi - 2Dx yi + C – C = 2Dy + (2b - 1)Dx • Do dấu của pi và (d1-d2) giống nhau nên khi xét dấu của pi thì ta xác định được yi+1 • Mặc khác, pi+1 – pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C) = 2Dy – 2Dx(yi+1 – yi) • Từ đây, ta suy ra cách tính pi+1 theo pi: – Nếu pi
- Begin p = 2Dy - Dx; const1=2Dy; const2=2(Dy-Dx); x = x1; y = y1; putpixel(x,y,color); x
- Cài đặt thuật toán (với Dx>Dy>0) void BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); putpixel(x, y, color); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x++; putpixel(x, y, color); } } 7
- Tổng kết • Xác định d1 và d2 sao cho d1 là độ lệch từ y đến điểm hiện hành yi • Xác định pi sao cho pi cùng dấu với (d1 – d2) và mang giá trị nguyên • Tính pi+1 theo pi theo 2 trường hợp pi < 0 và pi > 0. Chú ý trường hợp pi = 0. • Tính p1 yi+1 P (xi+1,y=f(xi+1)) d2 d1 yi S xi xi+1=xi+1 8
- Mở rộng 3 2 4 1 Dx0,|Dx|>Dy Dx>0,Dy>0,Dx>Dy 8 5 Dx>0,Dy|Dy| Dx
- Kết hợp vùng 1 và 8 • x tăng 1 • Vùng 1 y tăng còn vùng 2 y giảm ... int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x++; putpixel(x, y, color); } ... 10
- Kết hợp vùng 1 và 4 • Vùng 1 x tăng 1, vùng 4 x giảm 1 • y tăng ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x += dx; putpixel(x, y, color); } ... 11
- Kết hợp vùng 1, 4, 5, 8 • x tăng 1 khi Dx > 0, giảm 1 khi Dx < 0 • y tăng khi Dy > 0, giảm khi Dy < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } ... 12
- Kết hợp vùng 2, 3, 6, 7: x tính theo y • y tăng 1 khi Dy > 0, giảm 1 khi Dy < 0 • x tăng khi Dx > 0, giảm khi Dx < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (y != y2) { if (p < 0) { p += const1; } else { p += const2; x += dx; } y += dy; putpixel(x, y, color); } ... 13
- Chương trình hoàn chỉnh void BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); putpixel(x, y, color); if (Dx > Dy) { int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } } else {// đổi vai trò giữa x và y … } 14 }
- Bài tập Cài đặt thuật toán Bresenham vẽ hình sau 15
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Đồ họa máy tính: Ánh sáng
32 p | 236 | 33
-
Bài giảng Đồ họa máy tính - Ma Thị Châu
22 p | 279 | 28
-
Bài giảng Đồ họa máy tính: Các thuật toán mành hóa - Ma Thị Châu
18 p | 223 | 17
-
Bài giảng Đồ họa máy tính: Phần 1
47 p | 112 | 14
-
Bài giảng Đồ họa máy tính: Các phép biến đổi trong đồ họa hai chiều - TS. Đào Nam Anh
52 p | 135 | 13
-
Bài giảng Đồ họa máy tính: Giới thiệu đồ họa 3 chiều - TS. Đào Nam Anh
54 p | 110 | 12
-
Bài giảng Đồ họa máy tính: Các phép biến đổi trong đồ họa ba chiều - TS. Đào Nam Anh
28 p | 99 | 11
-
Bài giảng Đồ họa máy tính: Các đối tượng đồ họa cơ sở - TS. Đào Nam Anh
50 p | 100 | 10
-
Bài giảng Đồ họa máy tính: Phần 2
40 p | 102 | 8
-
Bài giảng Đồ họa máy tính: Các khái niệm đồ họa máy tính - Ma Thị Châu (2017)
31 p | 54 | 8
-
Bài giảng Đồ họa máy tính: Giới thiệu về đồ họa máy tính - TS. Đào Nam Anh
50 p | 88 | 7
-
Bài giảng Đồ họa máy tính: Phần 1 - ĐH Sư phạm kỹ thuật Nam Định
128 p | 38 | 6
-
Bài giảng Đồ họa máy tính: Giới thiệu đồ họa 3 chiều - TS. Đào Nam Anh (tt)
54 p | 91 | 6
-
Bài giảng Đồ họa máy tính - ĐH Hàng Hải VN
54 p | 41 | 6
-
Bài giảng Đồ họa máy tính: Bài 3 - Lê Tấn Hùng
39 p | 74 | 5
-
Bài giảng Đồ họa máy tính: Chương 1 - ThS. Trần Thị Minh Hoàn
44 p | 101 | 5
-
Bài giảng Đồ họa máy tính: Đồ họa ba chiều - Ngô Quốc Việt
36 p | 26 | 4
-
Tập bài giảng Đồ họa máy tính
227 p | 30 | 4
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn