Line Drawing bài giảng đồ họa
ĐỒ HỌA MÁY TÍNH Các thuật toán vẽ đường Dẫn nhập • Giả sử tọa độ điểm nguyên sau xấp xỉ đối tượng thực (x i , yi ), i = 0, Đây điểm nguyên hiển thị hình • Bài toán đặt biết (x i , y i ) tọa độ nguyên xác định bước thứ i, điểm nguyên (x i+1 , yi+1 ) xác định • Đối tượng hiển thị lưới nguyên liền nét, điểm mà (x i+1 , yi+1 ) chọn tám điểm đánh số từ đến hình sau (điểm đen (x i , yi ) ).Hay nói cách khác : (xi+1 , yi+1 ) = (xi ± 1, yi ± 1) • Dáng điệu đường cho ta gợi ý chọn tám điểm Cách chọn điểm tùy thuộc vào thuật toán sở xem xét tới vấn đề tối ưu tốc độ Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 1/22 ĐỒ HỌA MÁY TÍNH Thuật toán vẽ đường thẳng • Xét đoạn thẳng có hệ số góc < m < Dx > • Với đoạn thẳng dạng này, (x i , y i ) điểm xác định bước thứ i (điểm màu đen) điểm cần chọn (x i+1 , y i+1 ) bước thứ (i+1) hai trường hợp hình vẽ sau : x i +1 = x i + yi+1 ∈ {yi , yi + 1} (xi+1, yi+1) yi (xi+1, yi) xi • Vấn đề lại, cách chọn hai điểm để tối ưu mặt tốc độ Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 2/22 ĐỒ HỌA MÁY TÍNH Thuật toán DDA (Digital Differential Analyzer) • Việc định chọn yi +1 yi hay yi + , dựa vào phương trình đoạn thẳng y = mx + b Nghóa là, ta tính tọa độ điểm (x i + 1, y) thuộc đoạn thẳng thực Tiếp đó, yi+1 giá trị sau làm tròn giá trị tung độ y y = m( x i + 1) + b • Như : y = Round ( y) i +1 (xi+1, Round(y)) (xi+1, y) (xi, yi) • Nếu tính trực tiếp giá trị thực y bước từ phương trình y = mx + b phải cần phép toán nhân phép toán cộng số thực Để cải thiện tốc độ, người ta tính giá trị thực y bước theo cách sau để khử phép tính nhân số thực : • Nhận xét : y sau = mx i +1 + b = m(x i + 1) + b y trước = mx i + b ⇒ y sau = y trước + m Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 3/22 ĐỒ HỌA MÁY TÍNH Lưu đồ thuật toán DDA Begin m=Dy/Dx; x=x1; y=y1; putpixel(x, Round(y), c); x