font truetype, font CHR, Kích thước : chiều cao và chiều rộng của kí tự. Các kí tự định nghĩa bằng đường gấp khúc có thể dễ dàng thay đổi kích thước hơn là các kí tự định nghĩa bằng mẫu các pixel. Khoảng cách giữa các kí tự. Sự canh chỉnh (gióng lề) : canh trái (left text), canh phải (right text), canh giữa (center text), canh đều nhau (justify text). Cách hiển thị tuần tự của các kí tự : có thể là phải sang trái, từ trên xuống dưới, từ trái sang phải, từ dưới lên trên. Hướng của kí tự. Hình 2.9 – Dạng bitmap và vector của font kí tự B 2. CÁC THUẬT TOÁN VẼ ĐƯỜNG 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à . Đâ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 là tọa độ nguyên xác định ở bước thứ i, điểm nguyên tiếp theo sẽ được xác định như thế nào. Nhận xét rằng để đối tượng hiển thị trên lưới nguyên được liền nét, các điểm mà có thể chọn chỉ là một trong tám điểm được đánh số từ 1 đến 8 trong hình 2.10 (điểm đen chính là ).Hay nói cách khác : . Dáng điệu của đường sẽ cho ta gợi ý khi chọn một trong tám điểm trên. Cách chọn các điểm như thế nào sẽ tùy thuộc vào từng thuật toán trên cơ sở xem xét tới vấn đề tối ưu tốc độ. Hình 2.10 – Các điểm có thể chọn ở bước (i+1) 2.1. Thuật toán vẽ đoạn thẳng Xét đoạn thẳng có hệ số góc và . Với các đoạn thẳng dạng này, nếu là điểm đã xác định được ở bước thứ i (điểm màu đen) thì điểm cần chọn ở bước thứ (i+1) sẽ là một trong hai trường hợp như hình vẽ sau : Hình 2.11 – Các điểm chọn ở bước (i+1) cho trường hợp đoạn thẳng có hệ số góc 0<m<1 Như vậy : Vấn đề còn lại là cách chọn một trong hai điểm trên như thế nào để có thể tối ưu về mặt tốc độ. 2.1.1. Thuật toán DDA (Digital Differential Analyzer) Với thuật toán DDA, việc quyết định chọn là hay , dựa vào phương trình của đoạn thẳng . Nghĩa là, ta sẽ tính tọa độ của điểm thuộc về đoạn thẳng thực. Tiếp đó, sẽ là giá trị sau khi làm tròn giá trị tung độ y. Như vậy : Hình 2.12 – Minh họa thuật toán DDA Nếu tính trực tiếp giá trị thực y ở mỗi bước từ phương trình 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 : Lưu đồ thuật toán DDA vẽ đoạn thẳng qua hai điểm (x 1 , y 1 ) và (x 2 ,y 2 ) Cài đặt minh họa thuật toán DDA #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<x2 ; i++ ) { x ++; y += m ; putpixel ( x , Round ( y ), Color ); } } // LineDDA Nhận xét Việc sử dụng công thức để tính giá trị y tại mỗi bước đã giúp cho thuật toán DDA nhanh hơn hẳn so với cách tính y từ phương trình do khử được phép nhân trên số thực. Tuy nhiên, việc cộng dồn giá trị thực m vào y có thể sẽ tích lũy sai số làm cho hàm làm tròn có kết quả sai dẫn tới việc xác định vị trí của điểm vẽ ra bị chệch hướng so với đường thẳng thực. Điều này chỉ xảy ra khi vẽ đoạn thẳng khá dài. Tuy đã khử được phép nhân số thực nhưng thuật toán DDA vẫn còn bị hạn chế về mặt tốc độ do vẫn còn phép toán cộng số thực và làm tròn. Có thể khắc phục thao tác cộng số thực m và làm tròn trong thuật toán bằng cách nhận xét với Dy, Dx là các số nguyên. 2.1.2. Thuật toán Bresenham Thuật toán Bresenham đưa ra cách chọn là hay theo một hướng khác sao cho có thể tối ưu hóa về mặt tốc độ so với thuật toán DDA. Vấn đề mấu chốt ở đây là làm thế nào để hạn chế tối đa các phép toán trên số thực trong thuật toán. Hình 2.13 – Minh họa thuật toán Bresenham Gọi là điểm thuộc đoạn thẳng. Ta có: . Đặt Xét tất cả các vị trí tương đối của y so với và , việc chọn điểm là S hay P phụ thuộc vào việc so sánh d 1 và d 2 hay dấu của : Nếu , ta sẽ chọn điểm S, tức là . . 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 : Lưu đồ thuật toán DDA vẽ đoạn thẳng qua hai điểm (x 1 , y 1 ) và (x 2 ,y 2 ) . trong tám điểm trên. Cách chọn các điểm như thế nào sẽ tùy thuộc vào từng thuật toán trên cơ sở xem xét tới vấn đề tối ưu tốc độ. Hình 2. 10 – Các điểm có thể chọn ở bước (i+1) 2. 1. Thuật toán vẽ. trên. Hướng của kí tự. Hình 2. 9 – Dạng bitmap và vector của font kí tự B 2. CÁC THUẬT TOÁN VẼ ĐƯỜNG 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à . Đây là các điểm nguyên sẽ