intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Các đối tượng đồ họa máy tính

Chia sẻ: ™——† Lvlr. DK †——™ »»» V.I.P ««« | Ngày: | Loại File: PDF | Số trang:37

225
lượt xem
61
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

• Có hai cách biểu diễn các ảnh này, đó là: – Biểu diễn bằng dãy các pixel. – Biểu diễn bằng tập các đối tượng hình học cơ sở như đoạn thẳng hay vùng tô đa giác, … Sau đó, các đối tượng cơ sở sẽ được chuyển sang dãy các pixel tương ứng để hiển thị. • Quá trình chuyển các đối tượng đồ họa cơ sở về dãy các pixel tương ứng được gọi là quá trình chuyển đổi bằng dòng quét (scanconverting)....

Chủ đề:
Lưu

Nội dung Text: Các đối tượng đồ họa máy tính

  1. BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM ĐỒ HỌA MÁY TÍNH GV : Trần Bá Ánh Email: tranbaanh@gmail.com 18/05/2010 1 Tài liệu tham khảo chính 1. Cơ Sở Đồ Họa Máy Tính - Hoàng Kiếm, Dương Anh Đức  2. Francis S. Hill, Computer Graphics  WWW  18/05/2010 2 1
  2. Thời lượng chương trình 30 LT + 60 TH (Tổng: 90 Tiết)  Qui định nghỉ học không quá: 20% số tiết (không quá 4  buổi) Điểm kiểm tra miệng: 2 (1 con điểm Lấy trong giờ thực  hành, 1 con điểm Chấm vở ghi) Điểm kiểm tra giữa kỳ: >=5 mới được phép dự thi cuối  kỳ (Không tổ chức thi lại giữa kỳ) Dự thi cuối kỳ: Nghỉ học không quá 4 buổi + Điểm giữa  kỳ >=5 18/05/2010 3 Chương 2 CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ 1. Các đối tượng đồ họa cơ sở 2. Các thuật toán vẽ đường 3. Các thuật toán tô màu 2
  3. Phần 1 Các đối tượng đồ họa cơ sở ymax y Pwc(x, y) Pwc(x, y) O x O xmax 6 18/05/2010 3
  4. x O y y O x Quy ước bàn tay phải Quy ước bàn tay trái 18/05/2010 7 • Có hai cách biểu diễn các ảnh này, đó là: – Biểu diễn bằng dãy các pixel. – Biểu diễn bằng tập các đối tượng hình học cơ sở như đoạn thẳng hay vùng tô đa giác, … Sau đó, các đối tượng cơ sở sẽ được chuyển sang dãy các pixel tương ứng để hiển thị. • Quá trình chuyển các đối tượng đồ họa cơ sở về dãy các pixel tương ứng được gọi là quá trình chuyển đổi bằng dòng quét (scan- converting). 8 18/05/2010 4
  5. 18/05/2010 9 • Điểm: (x, y, c) – Thông tin: Tọa độ (x, y). – Thuộc tính: Màu sắc (c). 10 18/05/2010 5
  6. • Thông tin: Điểm đầu (x1, y1) và điểm cuối (x2, y2). 18/05/2010 11 12 18/05/2010 6
  7. 18/05/2010 13 14 18/05/2010 7
  8. 18/05/2010 15 • Màu sắc • Độ rộng nét vẽ • Kiểu vẽ 16 18/05/2010 8
  9. 18/05/2010 17 • Các thuộc tính: – Màu sắc – Font chữ –Kích thước – Khoảng cách – Sự canh chỉnh – Cách hiển thị tuần tự 18 18/05/2010 9
  10. Phần 2 Các thuật toán vẽ đường • Đoạn thẳng • Đường tròn • Các đường cong Conic • Giả sử tọa độ các điểm nguyên sau khi xấp xỉ đối tượng thực lần lượt là (xi , yi ), i = 0,.... Đây là các điểm nguyên sẽ được hiển thị trên màn hình. • Bài toán đặt ra là nếu biết được (xi , yi ) là tọa độ nguyên xác định ở bước thứ i, điểm nguyên tiếp theo (xi+1 , yi+1 ) sẽ được xác định như thế nào? 20 18/05/2010 10
  11. • Đối tượng hiển thị trên lưới nguyên được liền nét, các điểm mà (xi+1 , yi+1) có thể chọn chỉ là một trong tám điểm được đánh số từ 1 đến 8 trong hình sau (điểm đen chính là (xi , yi )).Hay nói cách khác: (xi+1 , yi+1) = (xi  1, yi  1) 18/05/2010 21 • Xét đoạn thẳng có hệ số góc 0 < m < 1 và Dx > 0. • Điểm cần chọn (xi+1 , yi+1) ở bước thứ (i+1) sẽ là một trong hai trường hợp như hình vẽ sau: 22 18/05/2010 11
  12. 18/05/2010 23 • Nếu tính trực tiếp giá trị thực y ở mỗi bước từ phương trình y = mx + b thì phải cần một phép toán nhân và một phép toán cộng số thực. Để cải thiện tốc độ, người ta tính giá trị thực của y ở mỗi bước theo cách sau để khử phép tính nhân trên số thực: – Nhận xét rằng: • ysau= mxi+1 + b = m(xi + 1) + b = mxi + b + m • ytrước= mxi + b – Suy ra: ysau= ytrước + m. 24 18/05/2010 12
  13. 18/05/2010 25 • Cho A(12, 20) và B(22, 27), ta có m = 0.7 i xi yi y 0 12 20 20 1 13 21 20.7 2 14 21 21.4 3 15 22 22.1 4 16 23 22.8 5 17 24 23.5 6 18 24 24.2 7 19 25 24.9 8 20 26 25.6 9 21 26 26.3 10 22 27 27 26 18/05/2010 13
  14. #define Round(a) int(a+0.5) int Color = GREEN; void LineDDA (int x1, int y1, int x2, int y2) { int x = x1; float y = y1; float m = float(y2-y1)/(x2-x1); putpixel(x, Round(y), Color); for(int i=x1; i
  15. 18/05/2010 29 • Từ đây ta có thể suy ra cách tính pi+1 từ pi như sau: – Nếu pi < 0 thì pi+1= pi + 2Dy, do ta chọn yi+1= yi. – Ngược lại, nếu pi ≥ 0, thì pi+1= pi + 2Dy – 2Dx, do ta chọn yi+1= yi + 1. 30 18/05/2010 15
  16. • Giá trị p0 được tính từ điểm vẽ đầu tiên (x0, y0) theo công thức: p0 = 2Dyx0 – 2Dxy0 + c = 2Dyx0 – 2Dxy0 + 2Dy + (2b – 1)Dx • Do (x0, y0) là điểm nguyên thuộc về đoạn thẳng nên ta có y0 = mx0 + b = (Dy/Dx)x0 + b. Thế vào phương trình trên, suy ra: p0= 2Dy – Dx 18/05/2010 31 Lưu đồ thuật toán Bresenham 32 18/05/2010 16
  17. • Ví dụ: Cho A(12, 20) và B(22, 27), • Ta có: – Dx = 22 – 12 = 10, Dy = 27 – 20 = 7 – Const1 = 2Dy = 14, Const2 = 2(Dy – Dx) = -6 – p0 = 2Dy – Dx = 14 – 10 = 4 18/05/2010 33 i xi yi p 0 12 20 4 1 13 21 -2 2 14 21 12 3 15 22 6 4 16 23 0 5 17 24 -6 6 18 24 8 7 19 25 2 8 20 26 -4 9 21 26 10 10 22 27 4 34 18/05/2010 17
  18. 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; // Dy
  19. • Ta có dạng tổng quát của phương trình đường thẳng: Ax + By + C = 0 với A = y2 – y1, B = – (x2 – x1), C = x2y1 – x1y2 • Đặt F(x, y) = Ax + By + C , ta có nhận xét: • Lúc này việc chọn các điểm S, P ở trên được đưa về việc xét dấu của pi = 2F(MidPoint) = 2F(xi + 1, yi + ½) 18/05/2010 37 38 18/05/2010 19
  20. • Như vậy: – pi+1 = pi + 2Dy, nếu pi < 0 do ta chọn yi+1 = yi – pi+1 = pi + 2Dy – 2Dx, nếu pi ≥ 0 do ta chọn yi+1 = yi + 1 • Ta tính giá trị p0 ứng với điểm ban đầu (x0, y0), với nhận xét rằng (x0, y0) là điểm thuộc về đoạn thẳng, tức là ta có dạng Ax + By + C = 0 18/05/2010 39 0 ≤ m ≤ 1, Dx > 0 0 ≤ m ≤ 1, Dx < 0 -1 ≤ m ≤ 0 40 18/05/2010 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2