Bài giảng Các đối tượng đồ họa cơ sở - Phan Phúc Doãn
Bạn đang xem tài liệu "Bài giảng Các đối tượng đồ họa cơ sở - Phan Phúc Doãn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_cac_doi_tuong_do_hoa_co_so_phan_phuc_doan.ppt
Nội dung text: Bài giảng Các đối tượng đồ họa cơ sở - Phan Phúc Doãn
- Các đối tượng đồ họa cơ sở Phan Phúc Doãn 1
- Hệ tọa độ thực và hệ tọa độ thiết bị • Hệ tọa độ thực: – Tọa độ là số thực, liên tục – Lớn, nhỏ tùy ý • Hệ tọa độ thiết bị: – Tọa độ nguyên, rời rạc – Tọa độ bị giới hạn trong một khoảng nào đó – X thuộc [0, 639] – Hệ tọa độ thiết bị qui ước bàn tay trái 2
- Điểm • Là thành phần cơ sở • Tọa độ, màu sắc 3
- Đường thẳng, đường gấp khúc • Phương trình đoạn chắn: (x− x1 )( y 2 − y 1 ) = ( y − y 1 )( x 2 − x 1 ) • Phương trình tổng quát: Ax + By + C = 0 x=(1 − t ) x12 + tx • Phương trình tham số: y=(1 − t ) y12 + ty • Đường gấp khúc là tập các đoạn thẳng nối nhau xác định bởi các đỉnh 4
- Đường thẳng, đường gấp khúc (tt) • Màu sắc • Độ rộng nét vẽ • Kiểu nét vẽ: liền, đứt, 5
- Vùng tô • Đường biên và vùng bên trong • Đường biên: giống đoạn thẳng • Vùng bên trong: màu tô và mẫu tô 6
- Kí tự, chuỗi kí tự • Màu sắc • Font chữ • Kích thước • Khoảng cách giữa các kí tự • Sự canh chỉnh • Cách hiển thị tuần tự các kí tự • Hướng của kí tự 7
- Vẽ đường thẳng 8
- Đường thẳng trên màn hình Đường thẳng được hình thành từ các điểm rời rạc Các điểm được xác định từ phương trình của đường thẳng Ideal Line Rasterized line 9
- Đặc điểm của đường thẳng nguyên Xấp xỉ đường thẳng thực Không liên tục Dạng răng cưa (hình bậc thang) Nhanh – Thao tác cơ bản để tạo thành các đối tượng khác 10
- Phương trình đường thẳng thực (x1,y1) Dy Dx (x2,y2) y = m * x + b Dx = x2 − x1 Dy = y2 − y1 m = Dy / Dx b = y1 − m * x1 11
- Thuật toán Slope - Intercept SlopeInterceptLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1; int Dy = y2 – y1; int x = x1, y = y1; putpixel(x, y, color); if (Dx != 0) { float m = (float)Dy / (float)Dx; float b = y1 - m*x1; int stepX = (x2 > x1) ? 1 : -1; while (x != x2) { x += stepX; y = round(m*x + b); putpixel(x, y, color); } } } 12
- Lưu ý Khi độ lớn của hệ số góc đường thẳng lớn hơn 1 thì các điểm trên đường thẳng rời rạc. (x2,y2) Khắc phục:Tính tọa độ x theo y, nghĩa là x = g(y) Dy Dx (x1,y1) 13
- ImprovedSlopeInterceptLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1; int Dy = y2 – y1; int x = x1, y = y1; Thuật toán cải tiến putpixel(x, y, color); if (abs(Dx) > abs(Dy)) { float m = (float)Dy / (float)Dx; float b = y1 - m*x1; int stepX = (Dx < 0) ? -1 : 1; while (x != x2) { x += stepX; putpixel(x, round(m*x + b), color); } } else if (Dy != 0) { float m = (float)Dx / (float)Dy; float b = x - m*y; int stepY = (Dy < 0) ? -1 : 1; while (y != y2) { y += stepY; putpixel(round(m*y + b), y, color); } } } 14
- Cải tiến Vòng lặp bên trong: while (x != x2) { x += stepX; putpixel(x, round(m*x + b), color); } Giá trị của y được tính trực tiếp từ phương trình Chúng ta có thể tính giá trị của y bằng cách khác: float t = m * x + b + 0.5; while (x != x2) { x += stepX; t += m; putpixel(x, (int)t, color); } 15
- Digital Differential Analyzer DDALine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1; int Dy = y2 – y1; float t = 0.5; int x = x1, y = y1; putpixel(x, y, color); if (abs(Dx) > abs(Dy)) { float m = (float)Dy / (float)Dx; float b = y - m*x; int stepX = (Dx < 0) ? -1 : 1; t += b + m*x; m *= (float)stepX; while (x != x2) { x += stepX; t += m; putpixel(x, (int)t, color); } } else if (Dy != 0) { // swap x & y to do other slopes } } 16