Để tìm hiểu được bản chất và những kĩ thuật đã tạo nên được hình ảnh trong máy tính, môn kĩ thuật đồ họa đã trở thành một môn học chính khóa cho sinh viên chuyên ngành ở chương trình đại
Trang 1LỜI GIỚI THIỆU
Sự phát triển của đồ họa máy tính đã mang lại lợi ích to lớn trong giao diện người máy, thay vì phải giao tiếp bằng những dòng văn bản tẻ nhạt và khó nhớ thì những hình ảnh trực quan thân thiện và dễ hiểu đã thực sự là một cuộc cách mạng mới trong lĩnh vực máy tính, là bước đột phá làm cho máy tính gần gũi với con người và ngày càng trở thành một công cụ quan trọng không thể thiếu được trong mọi lĩnh vực đời sống xã hội
Để tìm hiểu được bản chất và những kĩ thuật đã tạo nên được hình ảnh trong máy tính, môn kĩ thuật đồ họa đã trở thành một môn học chính khóa cho sinh viên chuyên ngành ở chương trình đại học và cao học, môn học này giúp cho sinh viên nắm được những tư tưởng giải thuật, các nguyên lí cơ bản để xây dựng nên hình ảnh đồ họa trên máy tính và các ứng dụng đồ họa nhằm xây dựng các chương trình ứng dụng đồ hoạ và xử lí thông tin dưới dạng hình ảnh
Bài giảng này tác giả đã cố gắng biên soạn để phù hợp với nội dung giảng dạy trong chương trình đại học, giáo trình này cũng hữu ích cho những ai quan tâm đến cơ sở toán học của các phần mềm CAD
Trong quá trình biên soạn không tránh khỏi những khiếm khuyết, rất mong được sự đóng góp của các độc giả cũng như của các đồng nghiệp để giáo trình ngày càng hoàn thiện hơn
Trang 2MỤC LỤC
LỜI GIỚI THIỆU 1
CHƯƠNG I GIỚI THIỆU VỀ ĐỒ HOẠ MÁY TÍNH 4
1.1 Một số ứng dụng của đồ hoạ máy tính 4
1.1.1 Hỗ trợ thiết kế (CAD/CAM) 4
1.1.2 Giao diện người máy 5
1.1.3 Biểu diễn thông tin 6
1.1.4 Giải trí nghệ thuật 6
1.1.5 Giáo dục và đào tạo 7
1.1.6 Tự động hoá văn phòng và in ấn điện tử 7
1.1.7 Bản đồ học 7
1.2 Tổng quan về một hệ đồ hoạ 7
1.2.1 Phần cứng 7
1.2.2 Phần mềm: 12
1.3 Các hệ màu trong đồ hoạ 14
1.3.1 Hệ màu RGB 14
1.3.2 Hệ màu CMY (Cyan, Magenta, Yellow) 15
1.3.3 Hệ màu HSV (Hue, Saturation, Value) 16
1.3.4 Hệ màu HLS (Hue, Lightness, Saturation) 17
CHƯƠNG II CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ 19
2.1 Các đối tượng đồ hoạ cơ sở 20
2.1.1 Điểm 20
2.1.2 Đoạn thẳng, đường gấp khúc 20
2.1.3 Vùng tô 22
2.1.4 Kí tự, chuỗi kí tự 23
2.2 Các thuật toán vẽ đường: 23
2.2.1 Thuật toán vẽ đường thẳng: 24
2.2.2 Thuật toán vẽ đường tròn 32
Ví dụ 36
2.3 Thuật toán tô màu 39
2.3.1 Giải thuật tô màu loang 39
2.3.2 Giải thuật dựa theo dòng quét 40
CHƯƠNG III CÁC PHÉP BIẾN ĐỔI TRONG ĐỒ HOẠ HAI CHIỀU 53
3.2 Các phép hình học cơ sở 53
3.2.1 Phép tịnh tiến 53
3.2.2 Phép biến đổi tỉ lệ 54
3.2.3 Phép quay 54
3.2.4 Phép biến đổi tổng hợp 55
3.3.Biểu diễn các phép biến đổi dưới dạng toạ độ thuần nhất 55
3.3.1 Phép tịnh tiến : 56
3.3.2 Phép co giãn 56
3.3.3 Phép quay 56
3.3.4 Một số phép biến đổi khác 57
Trang 3CHƯƠNG IV HIỂN THỊ ĐỐI TƯỢNG HAI CHIỀU 60
4.1 Quy trình hiển thị đối tượng hai chiều 60
4.1.1 Một số khái niệm 60
4.1.2 Hệ tọa độ quan sát và hệ tọa độ thiết bị chuẩn 61
4.1.3 Chuyển đổi từ cửa sổ sang vùng quan sát 63
4.1.4 Các thuật toán xén hình 63
4.2 Các thuật toán cắt tỉa _ Clipping 64
4.2.1 Clipping điểm: 64
4.2.2 Clipping đoạn thẳng 64
4.2.2 Giải thuật cắt tỉa đa giác 76
CHƯƠNG V GIỚI THIỆU ĐỒ HOẠ BA CHIỀU 84
5 1 Các phép biến đổi hình học 84
5.1.1 Phép tịnh tiến 84
5.1.2 Phép tỉ lệ 85
5.1.3 Phép quay 85
5.2 Các phép chiếu trong 3D 92
5.2.1 Phép chiếu song song 93
Phép chiếu lên mặt phẳng x = 0 93
Phép chiếu lên mặt phẳng y = 0 93
Phép chiếu lên mặt phẳng z = 0 94
5.2.2 Phép chiếu phối cảnh 97
5.3 Góc nhìn phối cảnh 100
5.3.1 Góc nhìn phối cảnh một tâm chiếu 100
5.3.2 Góc nhìn phối cảnh hai tâm chiếu 101
5.3.3 Góc nhìn phối cảnh ba tâm chiếu 102
CHƯƠNG VI BIỂU DIỄN ĐỐI TƯỢNG BA CHIỀU 104
6.1 Biểu diễn mặt đa giác 104
6.1.1 Biểu diễn bằng bảng đa giác 105
6.1.2 Phương trình mặt phẳng 106
6.1.3 Lưới đa giác (polygon meshes) 109
6.2 Các đường cong và mặt cong 110
6.3 Các mặt có quy luật (ruled surfaces) 110
6.3.1 Định nghĩa 110
6.3.2 Phương trình tham số 111
6.3.3 Khảo sát các mô hình minh họa 111
6.4 Các mặt tròn xoay (surfaces of revolution) 113
6.5 Các mặt cong bậc hai 114
6.5.1 Mặt cầu 114
6.5.2 Ellipsoid 115
6.6 Vẽ đường cong và mặt cong bằng Bezier và B-Spline 115
6.6.1 Vẽ các đường cong Bezier 116
6.6.2 Đường cong Spline và B-Spline 126
6.6.3 Thiết kế các mặt cong dựa trên Bezier và B-Spline 130
Trang 4CHƯƠNG I GIỚI THIỆU VỀ ĐỒ HOẠ MÁY TÍNH
Đầu những năm 1980, máy tính chỉ dùng trong lĩnh vực chuyên môn hóa, sau đó máy tính cá nhân ra đời được xây dựng với chế độ hiển thị đồ hoạ điểm ảnh của Xerox Việc
sử dụng chế độ bitmap trong tương tác giữa người và máy tính trở nên phổ biến hơn
1.1 Một số ứng dụng của đồ hoạ máy tính
- Bipmap là ảnh của bộ nhớ, trong đó các bít 0 và 1 là đại diện cho một ma trận của dãy
điểm ( pixel hay pels, viết tắt của “ picture element ”) Đồ hoạ sử dụng bitmap có giao
diện thuận tiện cho phép mọi người sử dụng máy tính một cách đơn giản hơn
- Desktop: Được phổ biến với việc thiết lập một khoảng không gian trên màn hình Có
nghĩa trên một cửa sổ chính ( Window manager ), người sử dụng có thể tạo ra, xác định vị
trí, thay đổi kích thước các vùng hình chữ nhật trên màn hình gọi là các cửa sổ con Phương pháp này cho phép người dùng có thể là được nhiều hoạt động bằng cách sử dụng chuột
Việc điều khiển thao tác của đối tượng bằng cách “trỏ và bấm ” thay thế cách gõ lệnh ở
hệ điều hành trước như hệ điều hành DOS, vì vậy người dùng có thể kích hoạt chương trình bằng cách chọn các biểu tượng hay sử dụng các menu
Cần phân biệt đồ hoạ máy tính với xử lí ảnh là đối với xử lí ảnh thì từ ảnh qua phép biến đổi cho kết quả là ảnh hoặc ko ảnh, còn ĐHMT thì từ ảnh hoặc không ảnh qua phép biến đổi cho kết quả luôn là ảnh
Tóm lại đồ hoạ máy tính là tất cả những gì liên quan tới việc tổng hợp các hình ảnh của
đối tượng thực hay ảo trên máy tính
Những ưu điểm của tương tác đồ hoạ
Ngày nay hầu hết các chương trình (soạn thảo, bảng tính) sử dụng đồ hoạ trong giao diện với người dùng Sự phát triển của đồ hoạ máy tính ngày nay càng rộng rãi với các chế độ
đồ hoạ hai chiều (2D) và 3 chiều (3D), và cao hơn trong các lĩnh vực xã hội khác nhau như khoa học, giáo dục, y học, kĩ thuật, thương mại và giải trí Chế độ đồ hoạ là một trong nhiều cách giao tiếp của máy vi tính, từ khi các tính năng ảnh 2D, 3D phát triển cao cho phép chúng ta xử lí các dữ liệu ảnh một cách nhanh chóng và hiệu quả
Sử dụng đồ họa trong giao diện với người dùng: Đồ họa máy tính giúp chúng ta có thể tạo được không những hình ảnh của thế giới thực mà còn cả những vật trừu tượng,các ảnh tổng hợp, mang lại những ảnh tĩnh và ảnh động rất hiệu quả
Với hiệu quả ngày càng cao, đồ họa có thể tạo ra những kết quả hay sản phẩm chất lượng cao và chính xác hơn, năng suất hơn và giảm chi phí thiết kế
Trang 5tượng được hiển thị dưới các phác thảo của phần khung Khi xác định chiều của đối tượng, người thiết kế có thể xem bất kì phía nào của đối tượng, thiết kế xong khung, mô
hình chiếu sáng, tô màu và tạo bóng bề mặt sẽ được kết hợp để tạo ra kết quả cuối cùng rất gần với thế giới thực
1.1.2 Giao diện người máy
Hầu hết các ứng dụng chạy trên máy tính cá nhân, trạm làm việc hay mạng máy tính đều
có giao diện với người dùng dựa vào việc dùng hệ thống cửa sổ để quản lí các hoạt động diễn ra đồng thời và các đối tượng trên màn hình
- Các ứng dụng chạy trên máy tính đều có giao diện giúp ta có thể dễ dàng mô phỏng các hoạt động, trỏ hoặc nhấn chuột để lựa chọn các mục trên menu, biểu tượng và các đối tượng trên màn hình hay nhập văn bản
Giao diện đồ hoạ thực sự là một cuộc cách mạng mang lại sự thuận tiện và thoải mái cho người dùng ứng dụng Các ứng dụng dựa trên hệ điều hành MS Windows là một minh hoạ rất trực quan của giao diện đồ hoạ Các chức năng của ứng dụng này được thiết kế cho người dùng làm việc thông qua các biểu tượng mô tả chức năng đó
- Các ứng dụng dựa trên hệ điều hành MS Windows như là lưu tập tin có biểu tượng là đĩa mềm, chức năng in được biểu tượng qua máy in v.v , các biểu tượng này chiếm ít không gian so với việc dùng văn bản và giải quyết những trở ngại về mặt ngôn ngữ
- Các ứng dụng có giao diện đồ hoạ còn cho phép người dùng khả năng làm việc dễ dàng với nhiều cửa sổ với nhiều dạng tài liệu khác nhau cùng một lúc
Trang 61.1.3 Biểu diễn thông tin
Đồ họa máy tính ứng dụng vào việc mô tả các biểu đồ, đồ thị minh họa mối quan hệ giữa nhiều đối tượng với nhau trong kinh doanh, trong khoa học kĩ thuật
Đây là các ứng dụng sử dụng đồ hoạ máy tính để phát sinh các biểu đồ, đồ thị minh hoạ mối quan hệ giữa nhiều đối tượng với nhau trong kinh doanh, trong khoa học kĩ thuật Các ứng dụng này thường được dùng để tóm lược các dữ liệu về tài chính, thống kê, kinh
tế, khoa học, toán học giúp cho việc nghiên cứu, quản lí một cách có hiệu quả Tất cả đều được trình bày đẹp, ngắn gọn, dễ sử dụng, Trong thương mai, đồ hoạ máy tính dùng
để tạo ra những hình ảnh gây ấn tượng và thu hút sự chú ý Các máy tính cá nhân, điện thoại, và video ở những nơi công cộng như bảo tàng, các nút giao thông, siêu thị để hướng dẫn khách, đưa ra sự lựa chọn, thậm chí mua bán qua máy tính
1.1.4 Giải trí nghệ thuật
- Các ứng dụng của đồ họa máy
tính như PainShop Pro, Adobe
Photoshop, 3D Studio,
CorelDraw đã giúp cho những
họa sĩ, tạo mẫu thiết kế các hình
ảnh sống động và chân thực,
Đối với các hoạ sĩ, tạo mẫu,
những chương trình đồ hoạ máy
tính là một công cụ trợ giúp hết
sức đắc lực, ví dụ như PainShop
Pro, Adobe Photoshop, 3D
Studio, CorelDraw đã giúp họ
thiết kế các hình ảnh sống động
và chân thực Với các chương trình này, người hoạ sĩ được máy tính tạo cho cảm giác y như đang làm việc ngoài đời thực bằng cách cung cấp các công cụ như khung vẽ, giá vẽ, bảng pha màu, các hiệu ứng ba chiều làm cho họ cảm thấy rất thoải mái và tiện lợi
- Ngoài ra đồ hoạ máy tính còn giúp tạo ra các chương trình trò chơi, giải trí; hỗ trợ cho các kĩ xảo điện ảnh, cho các nhà làm phim
Trang 71.1.5 Giáo dục và đào tạo
Sử dụng đồ hoạ để nghiên cứu các thực thể trừu tượng, mô phỏng cấu trúc của các vật thể, tiến trình của các phản ứng hoá học trong chất lỏng, của hạt nhân được dùng rất nhiều trong việc hỗ trợ giảng dạy
Trong đào tạo, các ứng dụng mô phỏng được dùng để kiểm tra trình độ người lái, huấn luyện phi công, điều khiển giao thông
1.1.6 Tự động hoá văn phòng và in ấn điện tử
Tạo ra các văn bản điện tử và các văn bản sao chép như tài liệu, bảng biểu, đồ hoạ, các hình vẽ và các hình ảnh Với hệ thống Hypermedia còn cho phép tải những văn bản multimedia từ trên mạng
1.1.7 Bản đồ học
Đồ hoạ máy tính được sử dụng để đưa ra sơ đồ về vị trí địa lí và các hiện tượng tự nhiên một cách chính xác từ những dữ liệu đo được Ví dụ như bản đồ địa lí, bản đồ thời tiết, bản đồ mật độ dân số, bản đồ khai thác cho việc khoan và khai mỏ, biểu đồ hải dương học
Màn hình CRT Phía trong màn hình được phủ một lớp huỳnh quang Cathode được nung
nóng và phát xạ điện tử Để điều khiển toạ độ điểm sáng trên màn hình ta cần phải lái tia điện tử theo hai trục toạ độ x và y của màn hình nhờ cuộn lái tia Nguồn cao áp đặt giữa cathode và màn hình anot để tăng tốc tia điện tử về phía màn hình Các tia điện tử phải bắn liên tục để các tia điện tử quét liên tục trên màn hình để màn hình không bị nhấp nháy
Đối với tia điện tử nền màu, dựa trên nguyên tắc sau đây:
Ở giai đoạn đầu tia điện tử có 4 màu bằng cách sử dụng tăng cường độ tia điện tử xuyên qua 4 lớp màu của Photpho
Trang 8Màn hình CRT mầu: Có 3 súng điện tử thay thế cho một tia điện tử của CRT đơn sắc, cho 3 màu xanh lam (BLUE), xanh lục (GREEN) và màu đỏ (RED) Một điểm trên ống hình được chiếu sáng bởi 3 súng điện tử này với các cường độ sáng của các màu khác nhau trộn vào và cho chúng ta một màu tuỳ ý
Màn hình tinh thể lỏng LCD: là phần tử hữu cơ, trạng thái tự nhiên là kết tinh thành tinh
thể, bị hóa lỏngkhi nóng hoặc có các trường điện tử, trạng thái tinh thể làm xoắn ánh sáng cực 90 độ
Quá trình chuyển đổi từ tinh thể đến lỏng của LCD là tiến trình từ từ, tương tự như photphos, LCD ở trạng thái “on” trong khoảng thời gian có trường điện từ do vậy tinh thể lỏng cũng phải được làm tươi
LCD làm việc như một cái van đóng, mở, nó không phát ánh sáng nên nó phụ thuộc vào ánh sáng bên ngoài, trong các máy tính xách tay, góc độ ánh sáng thay đổi thì màu sắc cũng bị thay đổi
Trang 9Ảnh được hiển thị dưới dạng ma trận các điểm( điểm ảnh) biểu diễn toàn bộ màn hình Toàn bộ màn hình được quét lần lượt từ bởi bộ điều khiển Video, theo từng đường quét từ trên xuống dưới, từ trái sang phải
Mỗi điểm trên màn hình được gọi là một pixel hay là pel (viết tắt của picture element) Các thông tin về hình ảnh hiển thị trên màn hình được lưu trữ trong một vùng bộ nhớ gọi
là vùng đệm làm tươi (refresh buffer) hay là vùng đệm khung (frame buffer) Vùng bộ nhớ này lưu trữ tập các giá trị cường độ sáng của toàn bộ các điểm trên màn hình và luôn luôn tồn tại một song ánh giữa mỗi điểm trên màn hình và mỗi phần tử trong vùng này
Để thay đổi các hình ảnh cần hiển thị, các giá trị tương ứng với vị trí và độ sáng phải được đặt vào vùng đệm khung Hình 1.8 minh họa các giá trị tương ứng trong vùng đệm khung để hiển thị hình ảnh của chữ A trên màn hình
Đối với màn hình đen trắng, vùng đệm khung còn được gọi là bitmap, với các màn hình khác vùng đệm khung thường được gọi là pixmap
Để tạo ra các ảnh đen trắng, đơn giản chỉ cần lưu thông tin của mỗi pixel bằng 1 bit (các giá trị 0, 1 sẽ tượng trưng cho việc tắt (tối), bật (sáng) pixel trên màn hình) Trong trường hợp ảnh nhiều màu, người ta cần nhiều bit hơn, nếu thông tin của mỗi pixel được lưu bằng b bit, thì ta có thể có 2b giá trị màu phân biệt cho pixel đó
Trang 10Hình 1.1 Song ánh giữa vùng đệm khung và màn hình
Trong các màn hình màu, người ta định nghĩa tập các màu làm việc trong một bảng tra (LookUp Table - LUT) Mỗi phần tử của LUT định nghĩa một bộ ba giá trị R (Red), G (Green), B (Blue) mô tả một màu nào đó Khi cần sử dụng một màu, ta chỉ cần chỉ định số thứ tự (index) tương ứng của màu đó trong LUT Bảng LUT có thể được thay đổi bởi các ứng dụng và người lập trình có thể can thiệp điều khiển Với cách làm này chúng ta có thể tiết kiệm không gian lưu trữ cho mỗi phần tử trong vùng đệm khung
Số phần tử của LUT được xác định từ số lượng các bits/pixel Nếu mỗi phần tử của vùng đệm khung dùng b bits để lưu thông tin của một pixel, thì bảng LUT có 2b phần tử Nếu b=8, LUT sẽ có 28=256 phần tử, đó chính là số màu có thể được hiển thị cùng một lúc trên màn hình
Việc làm tươi trên màn hình dạng này được thực hiện ở tốc độ 60 đến 80 frame/giây Đôi khi tốc độ làm tươi còn được biểu diễn bằng đơn vị Hertz (Hz – số chu kì/ giây), trong đó một chu kì tương ứng với một frame Sử dụng đơn vị này, chúng ta có thể mô tả tốc độ làm tươi 60 frame/giây đơn giản là 60Hz Khi đạt đến cuối mỗi dòng quét, tia điện tử quay trở lại bên trái của màn hình để bắt đầu dòng quét kế tiếp Việc quay trở lại phía trái màn hình sau khi làm tươi mỗi dòng quét được gọi là tia hồi ngang (horizontal retrace)
Và tới cuối mỗi frame, tia điện tử (tia hồi dọc – vertical retrace) quay trở lại góc trên bên trái của màn hình để chuẩn bị bắt đầu frame kế tiếp
Trong một số màn hình, mỗi frame được hiển thị thành hai giai đoạn sử dụng kĩ thuật làm tươi đan xen nhau (interlaced refesh) Ở giai đoạn đầu tiên, tia quét sẽ quét một số dòng từ trên xuống dưới, sau tia hồi dọc, các dòng còn lại sẽ được quét Việc đan xen các dòng quét này cho phép chúng ta thấy được toàn màn hình hiển thị chỉ trong một nửa thời gian
so với dùng để quét tất cả các dòng một lần từ trên xuống dưới Kĩ thuật này thường được dùng cho loại màn hình có tốc độ làm tươi thấp
Trang 11Hiển thị raster cho chúng ta có thể dễ dàng thay đổi thuộc tính các điểm để thay đổi từng thành phần và từng vùng của hình ảnh
Các thiết bị hiển thị dạng vectơ
Thiết bị hiển thị phát triển trong những năm 60 và trở nên phổ biến trong những năm 80 được gọi là vector, stroke, line drawing, hoặc hiển thị các kiểu chữ Thuật ngữ vector được sử dụng như là một tổng hợp cho đường thẳng, stroke là một đường thẳng ngắn, và
kí tự được tạo trình tự các stroke đó
Có hai loại hiển thị hiển thị vectơ: Ống lưu (Direct View Storage Tube_DVST ) và hiển thị làm tươi vectơ (Vectơ refresh) Các đường thẳng khi hiển thị không có hiệu ứng bậc thang như khi nhìn trên các thiết bị hiển thị raster, nhưng DVST là các thiết bị tương phản thấp và nói chung không có khả năng loại bỏ các lựa chọn Ảnh được duy trì trên màn hình lâu Ngược lại, màn hình làm tươi vectơ trong đó các vectơ của ảnh được vẽ lại liên tục hoặc làm tươi trên màn hình, cho ta độ tương phản tốt, có khả năng thao tác động tốt nhưng giá thành cao
Trong chế độ hiển thị này người ta sử dụng các cuộn lái tia để quét thành các đoạn thẳng
và như thế để vẽ được 1 đối tượng đồ họa người ta phải phân tích đối tượng thành các đoạn thẳng cơ sở và lần lượt vẽ chúng
Hiển thị vector thích hợp cho các đối tượng hình học, có thể quan sát mô hình của hình ảnh và sự vật ở nhiều góc độ khác nhau một cách dễ dàng bằng cách thay điểm nhìn và góc nhìn
So sánh màn hình Raster với màn hình Vector hoặc màn hình khác:
Ưu: Giá rẻ, độ sáng tốt, tô màu vùng rất dễ dàng
Nhược: Tốn bộ nhớ để làm Video RAM, Tập hợp nhiều điểm ảnh, Để vẽ 1 đường thẳng
ta phải phân hình, tìm các điểm lân cận gần nó để vẽ thành 1 đường thẳng
b Các thiết bị nhập
Bàn phím : Xuất hiện trong hầu hết các máy tính, nó là thiết bị để nhập số liệu dạng văn
bản và số Đây là loại thiết bị quen thuộc nhất đối với người sử dụng tuy có hạn chế là tương tác không cao
Chuột Cùng với sự xuất hiện của các ứng dụng đồ họa tương tác cao, chuột là thiết bị
nhập ngày càng quen thuộc với người sử dụng Người ta dùng chuột để trỏ và chọn các chức năng phù hợp với yêu cầu của mình, do đó giao tiếp giữa người dùng và máy tính ngày càng trở nên thân thiện
c Sự liên kết giữa các thành phần hệ thống:
Trang 121.2.2 Phần mềm:
Phần mềm đồ họa chia thành 2 loại:
+ Các công cụ lập trình (C, Pascal, )
+ Các trình ứng dụng đồ họa (Photoshop, autoCAD, )
a Biểu diễn tọa độ
Các hệ đồ họa sử dụng hệ tọa độ Decac để mô tả đối tượng
Nếu các toạ độ của đối tượng được mô tả trong các hệ tọa
độ khác như tọa độ cầu, chúng phải được chuyển về tọa
độ Descartes trước khi dùng
Hệ toạ độ Decard là hệ toạ độ gồm 3 trục Ox, Oy, Oz đôi
một vuông góc và tạo thành một tam diện thuận
Các vector đơn vị tương ứng với 3 trục là i, j, k Các đối
tượng hình học đơn giản nhất biểu diễn trong hệ toạ độ là điểm , vector, đường thẳng và mặt phẳng
b Quy trình hiển thị đối tượng
Trước tiên chúng ta mô tả các đối tượng thành phần của một ảnh phức tạp trong các hệ tọa độ riêng để thuận tiện cho việc biểu diễn tọa độ của chúng Các hệ tọa độ này được gọi là hệ tọa độ mô hình (modeling coordinates) hay còn gọi là hệ tọa độ cục bộ (local coordinates) Một khi các đối tượng thành phần được biểu diễn xong, chúng ta sẽ đặt chúng vào các vị trí tương ứng trong ảnh sử dụng hệ tọa độ thế giới thực (world coordinates) Sau cùng, các mô tả của ảnh trong hệ tọa độ thế giới thực sẽ được chuyển đến một hoặc nhiều hệ tọa độ khác nhau của thiết bị hiển thị, tùy vào chúng ta muốn hiển thị trên thiết bị nào Các hệ tọa độ này còn được gọi là hệ tọa độ thiết bị (device coordinates) Các mô tả trong các hệ tọa độ cục bộ và hệ tọa độ thế giới thực cho phép
Máy ghi phimMàn hình
Thiết bị giao tiếp với người sử dụng
Bộ VXL hiển thị CPU
Trang 13chúng ta sử dụng thứ nguyên thích hợp cho các đơn vị đo mà không phải bị ràng buộc gì của từng thiết bị hiển thị cụ thể
Hình 1.2 Quy trình hiển thị đối tượng
Thông thường, các hệ đồ họa chuyển các mô tả trong hệ tọa độ thế giới thực tới hệ tọa độ thiết bị chuẩn (normalized device coordinates) có các chiều là đơn vị trước khi chuyển tới
hệ tọa độ thiết bị Điều này làm cho hệ thống độc lập với nhiều loại thiết bị khác nhau
• Cuối cùng là tập các công cụ chứa các thao tác dùng cho việc quản lí và điều khiển ví
dụ như xóa toàn bộ màn hình, thiết lập chế độ đồ họa, …
d Các chuẩn phần mềm
Trang 14Mục tiêu căn bản của các phần mềm đồ họa được chuẩn là tính tương thích Khi các công
cụ được thiết kế với các hàm đồ họa chuẩn, phần mềm có thể được di chuyển một cách dễ dàng từ hệ phần cứng này sang hệ phần cứng khác và được dùng trong nhiều cài đặt và ứng dụng khác nhau
Sau những nỗ lực không nhỏ của các tổ chức chuẩn hóa của các quốc gia và quốc tế, một chuẩn cho việc phát triển các phần mềm đồ họa đã ra đời đó là GKS (Graphics Kernel System – Hệ đồ họa cơ sở) Hệ thống này ban đầu được thiết kế cho tập các công cụ đồ họa hai chiều, sau đó được phát triển và mở rộng cho đồ họa ba chiều
Các hàm của GKS thực sự chỉ là các mô tả trừu tượng, độc lập với bất kì ngôn ngữ lập trình nào Để cài đặt một chuẩn đồ họa cho ngôn ngữ cụ thể nào, các cú pháp tương ứng
sẽ được xác định và cụ thể hóa
Mặc dù GKS xác lập được các ý tưởng ban đầu cho các hàm đồ họa cơ sở, tuy nhiên nó không cung cấp một cách thức chuẩn cho việc giao tiếp đồ họa với các thiết bị xuất Nó cũng không xác định các cách thức cho các mô hình thời gian thực cũng như các cách thức lưu trữ và chuyển đổi hình ảnh Các chuẩn cho các cách thức này được xây dựng riêng, cụ thể là : Các chuẩn cho các cách thức giao tiếp thiết bị được cho bởi hệ CGI (Computer Graphics Interface System), hệ CGM (Computer Graphics Metafile) xác định các chuẩn cho việc lưu trữ và chuyển đổi hình ảnh, và hệ PHIGS (Programmer’s Hierarchical Interactive Graphics Standard) xác định các cách thức chuẩn cho các mô hình thời gian thực và các khả năng lập trình ở mức độ cao hơn mà chưa được quan tâm tới trong GKS
1.3 Các hệ màu trong đồ hoạ
Hệ màu là một chỉ số kĩ thuật của 1 hệ toạ độ màu ba chiều và tập các màu nhỏ thành phần có thể trông thấy được trong hệ thống toạ độ màu thuộc một gam màu đặc trưng VD: Mô hình màu RGB (Red, Green, Blue)
Mục đích của hệ màu là cho phép các chỉ số kĩ thuật quy ước của một số loại màu sắc thích hợp trong hệ toạ độ màu, không gian màu là một tập nhỏ hơn của không gian các màu có thể nhìn thấy được Vì vậy một hệ màu không thể mô tả tất cả các màu có thể nhìn thấy
Các hệ màu cần tính dễ sử dụng bởi vì chúng không có mối quan hệ trực tiếp với các ý niệm màu trực giác của con người bởi vậy các hệ màu khác nhau được phát triển nhằm đến việc sử dụng cho một tiêu chí nhất định
1.3.1 Hệ màu RGB
Không gian RGB mô tả màu sắc bằng ba thành phần Red, Green, Blue Không gian này
được minh họa bằng một khối lập phương với các trục chính R, G, B
Trang 15Mỗi màu trong không gian RGB đều được biểu diễn như là một vector thông qua ba vector cơ sở là Red, Green, Blue Do đó, ứng với các tổ hợp khác nhau của ba màu này sẽ cho ta một màu mới
Hình 1.3 Mô hình không gian RGB
Trong hình lập phương mỗi màu gốc (Red, Green, Blue) được đặt vào góc đối diện với các màu bù nó (Hai màu bù nhau là hai màu mà khi kết hợp tạo thành màu trắng hay xám (grey)) Như vậy Red đối diện với Cyan, Green đối diện với Magenta, Blue đối diện với Yellow Giá trị xám nằm trên đường chéo nối các đỉnh của hình lập phương Thường thường các trục R, G, B được chuẩn hóa Khi kết hợp hai màu lại với nhau thì
màu sinh ra có vector bằng tổng các vector thành phần
1.3.2 Hệ màu CMY (Cyan, Magenta, Yellow)
Hệ màu CMY là phần bù tương ứng của các màu RGB và chúng được sử dụng rộng rãi như những bộ lọc loại trừ các màu này từ ánh sáng trắng Vì vậy CMY còn được gọi là laọi trừ của màu gốc
Trang 16Hình 1.4 Mô hình CMY (bên phải) là bù của mô hình RGB (bên trái)
Ta có mối quan hệ giữa RGB và CMK như sau:
trên đỉnh Black của nó H (Hue) là góc quay quanh trục Values, S (Saturation) đi từ 0 đến 1, trục V
(Values) do vậy tương ứng với đường chéo nối đỉnh White và Black
Theo cách này, các màu đạt bão hòa khi S=1 và V=1 Trong không gian HSV các màu được chuẩn
Cyan
Magenta
Yellow
RedGreen
Trang 17hóa về số các gam (gamut) màu của thiết bị hiển thị
1.3.4 Hệ màu HLS (Hue, Lightness, Saturation)
Hệ màu HLS được xác định bởi tập hợp hình chóp 6 cạnh đôi của không gian hình trụ, màu đỏ tại góc 0o
Không gian này có chú trọng hơn không gian RGB
đến các thành phần của sự cảm nhận màu sắc của
mắt (Hue, Saturation, Lightness) Tuy nhiên,
không gian HSL thực ra cũng chỉ là một phép biến
đổi gần đúng của không gian RGB mà thôi Không
giống như các không gian màu khác xây dựng trên
sự cảm nhận màu sắc của mắt, không gian HSL vẫn
còn bị lệ thuộc vào phần cứng của CRT
Không gian HSL được biểu diễn trong hệ tọa độ
trụ, hình minh họa là hai hình nón úp vào nhau H
(Hue) là toạ độ ứng với góc quay, S (Saturation) là
tọa độ gốc, L là trục thẳng đứng Hầu hết các màu đạt bão hòa khi S = 1 và L = 0.5
Bảng so sánh giữa các không gian màu
Chuẩn công nghiệp cho các thao tác đồ họa máy tính
Hình thức biến đổi khác của không gian RGB
Hình thức biến đổi khác của không gian RGB
Liên hệ trực tiếp với phần cứng
Liên hệ gần hơn với sự cảm nhận màu sắc của con người
Liên hệ gần hơn với sự cảm nhận màu sắc của con người
Là chuyển đổi cuối cùng cho tất
cả các nhu cầu hiển thị
Đòi hỏi các phép biến đổi phức tạp
Đã đơn giản hóa các thao tác tính toán
Không thể chuyển sang màn hình
Độc lập thiếøt bị Độc lập thiết bị
Black
MagentaCyan
White
Red (0o)
Blue (240o)
Trang 18khác (phụ thuộc thiết bị)
Không có sự tương ứng 1-1 với cách cảm nhận màu của con người
Có Có
Mô hình là hình lập phương
Mô hình là hai hình nón úp vào nhau
Mô hình là hình nón đơn
Được chuẩn hóa
Độ bão hòa đạt max khi S =1, L
=0.5
Độ bão hòa đạt max khi S =1, V
=1
Trộn màu không
rõ ràng
Câu hỏi cuối chương
1 Hai màn hình có độ phân giải là 640x480 và 1024x768 Cho biết số pixel được truy cập trong một giây của mỗi màn hình nếu tốc độ làm tươi của CRT là 60Hz
2 Một màn hình có kích thước theo chiều ngang là 12 inche, chiều dọc là 9.6 inch Hãy cho biết đường kính của mỗi điểm trên màn hình nếu độ phân giải là 1280x1024 và tỉ số phương là 3 Các hệ màu Mối liên hệ giữa chúng
4 Quy trình hiển thị đối tượng Ý nghĩa của các hệ tọa độ
5 Tập các hàm đồ họa của một công cụ lập trình Liên hệ tới các thư viện đồ họa của các ngôn ngữ đã học như C, Pascal
Trang 19CHƯƠNG II CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
Bất kì một ảnh mô tả thế giới thực nào bao giờ cũng được cấu trúc từ tập các đối tượng đơn giản hơn Ví dụ một ảnh thể hiện bài trí của một căn phòng sẽ được cấu trúc từ các đối tượng như cây cảnh, tủ kính, bàn ghế, tường, ánh sáng đèn, … Với các ảnh đồ họa phát sinh bằng máy tính, hình dạng và màu sắc của mỗi đối tượng có thể được mô tả riêng biệt bằng hai cách : hoặc là bằng dãy các pixel tương ứng hoặc là 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 ảnh sẽ được hiển thị bằng cách nạp các pixel vào vùng đệm khung
Hình 2.1 Ảnh cánh tay robot được cấu tạo từ các đối tượng đồ họa cơ sở
Với các ảnh được mô tả bằng các đối tượng hình học cơ sở, cần phải có một quá trình chuyển các đối tượng này về dạng ma trận các pixel trước Quá trình này còn được gọi
là quá trình chuyển đổi bằng dòng quét (scan-converting) Bất kì công cụ lập trình đồ họa nào cũng phải cung cấp các hàm để mô tả một ảnh dưới dạng các đối tượng hình học cơ sở hay còn gọi là các đối tượng đồ họa cơ sở (output primitives) và các hàm cho phép kết hợp tập các đối tượng cơ sở để tạo thành đối tượng có cấu trúc phức tạp hơn Mỗi đối tượng đồ họa cơ sở được mô tả thông qua dữ liệu về tọa độ và các thuộc tính của nó, đây chính là thông tin cho biết kiểu cách mà đối tượng được hiển thị Đối tượng
đồ họa cơ sở đơn giản nhất là điểm và đoạn thẳng, ngoài ra còn có đường tròn, và các đường conics, mặt bậc hai, các mặt và đường splines, các vùng tô đa giác, chuỗi kí tự,
… cũng được xem là các đối tượng đồ họa cơ sở để giúp xây dựng các ảnh phức tạp Chương này sẽ khảo sát các thuật toán hiển thị các đối tượng đồ họa cơ sở cho các thiết
Trang 20• Đối tượng được mô tả trong hệ tọa độ thực là đối tượng liên tục, còn đối tượng trong
hệ tọa độ thiết bị là đối tượng rời rạc, do đó bản chất của quá trình chuyển đổi này chính là sự rời rạc hóa và nguyên hóa các đối tượng sao cho có thể xác định các điểm nguyên xấp xỉ đối tượng một cách tốt nhất, thực nhất Nghĩa là đối tượng hiển thị bằng lưới nguyên trên thiết bị hiển thị phải có hình dạng tương tự như đối tượng trong lưới tọa độ thực và "có vẻ" liên tục, liền nét Sự liên tục trên lưới nguyên của thiết bị hiển thị có được do mắt người không thể phân biệt được hai điểm quá gần nhau
• Do các đối tượng đồ họa cơ sở là thành phần chính cấu trúc các đối tượng phức tạp nên các thuật toán hiển thị chúng cần phải được tối ưu hóa về mặt tốc độ, đây chính
là điểm mấu chốt cho việc ra đời các thuật toán khác nhau
Hình 2.2 Quá trình chuyển đổi một đoạn thẳng về dãy các pixel tương ứng
2.1 Các đối tượng đồ hoạ cơ sở
2.1.1 Điểm
Điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ Đối với hệ tọa độ hai chiều mỗi điểm được xác định
bởi cặp tọa độ (x, y)
Ngoài thông tin về tọa độ, điểm còn có thuộc tính là màu sắc
2.1.2 Đoạn thẳng, đường gấp khúc
Một đường thẳng có thể xác định nếu biết hai điểm thuộc nó Phương trình đường thẳng
đi qua hai điểm (x1, y1) và (x2, y2) có dạng sau :
hay ở dạng tương đương :
Khai triển ta có dạng : , trong đó :
Trang 21Đây còn được gọi là phương trình đoạn chắn của đường thẳng
Nếu khai triển dưới dạng :
dạng , dạng này được gọi là phương trình tổng quát của đường thẳng Phương trình tham số của đường thẳng có dạng các tọa độ x, y được mô tả qua một thành phần thứ ba là t Dạng này rất thuận tiện khi khảo sát các đoạn thẳng
Nếu , ta có các điểm (x,y) thuộc về đoạn thẳng giới hạn bởi hai điểm (x1, y1) và (x2, y2), nếu , ta sẽ có toàn bộ đường thẳng
Một đoạn thẳng là một đường thẳng bị giới hạn bởi hai điểm đầu, cuối
Hình 2.3 – Dạng tham số của phương trình đường thẳng
Đường gấp khúc là tập các đoạn thẳng nối với nhau một cách tuần tự Các đoạn thẳng này không nhất thiết phải tạo thành một hình khép kín và các đoạn có thể cắt lẫn nhau Điểm giao của hai đoạn thẳng được gọi là đỉnh Các đường gấp khúc được xác định qua danh sách các đỉnh, mỗi đỉnh được cho bởi các cặp tọa độ
Một đa giác là một đường gấp khúc có điểm đầu và điểm cuối trùng nhau
Trang 22Hình 2.4 – Đường gấp khúc (a) và đa giác (b)
Các thuộc tính của đoạn thẳng bao gồm :
Các thuộc tính của vùng tô bao gồm:
• Thuộc tính của đường biên : chính là các thuộc tính như thuộc tính của đoạn thẳng
• Thuộc tính của vùng bên trong : bao gồm màu tô và mẫu tô
Trang 23Hình 2.6 – Vùng tô với các dạng đường biên và mẫu tô khác nhau
2.1.4 Kí tự, chuỗi kí tự
Các chuỗi kí tự giúp hiển thị nội dung các thông điệp theo một ngôn ngữ nào đó
Các thuộc tính của kí tự bao gồm :
• Màu sắc của các kí tự
• Font chữ : bộ kí tự dùng hiển thị; Nó định nghĩa kiểu, kích thước của kí tự hiển thị Hình dạng của mỗi kí tự có thể được xác định bởi một tập các đường gấp khúc (trường hợp font vector) hay là mẫu các pixel (font bitmap) Có nhiều loại font khác nhau như font bitmap, 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
Hình 2.7 – Dạng bitmap và vector của font kí tự B
2.2 Các thuật toán vẽ đường:
Biến đổi đường liên tục thành rời rạc
Yêu cầu chất lượng vẽ
• Hình dạng liên tục
Trang 24• Độ dầy và độ sáng đều
• Các pixel gần đường “lí tưởng” được hiển thị
• Vẽ nhanh
Quy t c t ng quát khi v h a
- Cộng và trừ nhanh hơn nhân
- Nhân nhanh hơn chia
- Sử dụng bảng để đánh giá hàm rời rạc nhanh hơn tính toán
- Tính toán số nguyên nhanh hơn số thực
- Tránh các tính toán không cần thiết nhờ nhận ra các trường hợp đặc biệt của đường vẽ 2.2.1 Thuật toán vẽ đường thẳng:
Bài toán: Trong mặt phẳng cho 2 điểm (x1, y1);(x2, y2) Hãy vẽ đoạn thẳng nối 2 điểm
(x1, y1) và (x2, y2)
Ta có: phương trình đường thẳng qua (x1, y1); (x2, y2)
1 2
1 2
1
1
x x
y y
1 2
x x
y y
−
− ; m=y1-kx1
Giả sử vừa vẽ điểm tại (xi, yi), bây giờ phải xác định điểm sẽ vẽ thuộc một trong 8 pixel liền kề: (xi+1, yi), (xi-1, yi), (xi, yi-1), (xi, yi+1), (xi+1, yi+1), (xi-1, yi+1), (xi-1, yi-1), (xi+1, yi-1)
Hình dạng đoạn thẳng phụ thuộc vào các giá trị dx và dy
dx=0 -> đ/thẳng song song trục y
dy=0 -> đ/thẳng song song trục x
dx>0 -> tọa độ x biến thiên tăng dần
dx<0 -> tọa độ x biến thiên giảm dần
Xét tương tự với dy
Nếu abs(dx)>abs(dy): y=f(x)
Nếu abs(dx)<abs(dy): x=f(y)
Trang 25a Thuật toán DDA (Digital Differential Analyzer)
Ý tưởng: Để đơn giản giải thuật chúng ta chỉ xét các đường thẳng có hệ số góc dương
và nhỏ hơn 1 để đảm bảo sự thay đổi của x sẽ lớn hơn của y
Giả sử tại bước thứ i ta đã xác định được xi và yi Ta cần xác định bước thứ i+1
Xây dựng thuật toán:
Thuật toán vẽ đường thẳng với 0<k<1 như sau:
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;
Trang 26float y = y1;
float m = float(y2-y1)/(x2-x1);
putpixel(x, Round(y), Color);
for(int i=x1; i<x2; i++)
Gọi d1 là khoảng cách yi+1 và yi + 1
Gọi d2 là khoảng cách yi+1 và yi
Nếu d1<d2 thì ta chọn yi+1 =yi+1
Nếu d1>d2 thì ta chọn yi+1 =yi
Ta vận dụng phương pháp từ việc xác định được so sánh d1 và d2 của điểm trước ta sẽ tính tiếp so sánh được điểm d1 và d2 của điểm kế tiếp
Trang 27Xây dựng thuật toán
y =
1 2
1 2
x x
y y
vậy Di+1= -2Δyxi+1 + 2Δxyi+1 + C
⇔ Di+1 = Di + 2(yi+1 - yi)Δx- 2Δy
Có hai trường hợp xảy ra :
• Nếu Di >0 ⇒ yi+1 = yi ⇒ Di+1 = Di - 2Δy
• Nếu Di <0 ⇒ yi+1 = yi +1 ⇒ Di+1 = Di + 2Δx- 2Δy
Đầu tiên ta phải xác định D1 bằng cách thay x1, y1 vào di, ta có:
D1 = 2y1 Δx-2x1Δy- 2Δxy1+2x1Δy-2Δy+Δx
= Δx-2Δy
Sơ đồ khối
Trang 28Ví dụ: Cho 2 điểm cụ thể hãy chạy thuật toán Bresenham để xác định các điểm trên đường thẳng qua 2 điểm {(1,1);(8,3)}
Putpixel(x,y)
D=D-2dy+2dx D>0
y =y+1 D=D - 2dy
Trang 29void LineBres (int x1, int y1, int x2, int y2) {
int Dx, Dy, p, Const1, Const2;
Trang 30} // LineBres
Nhận xét
• Thuật toán Bresenham chỉ làm việc trên số nguyên và các thao tác trên số nguyên chỉ là phép cộng và phép dịch bit (phép nhân 2) điều này là một cải tiến làm tăng tốc độ đáng kể so với thuật toán DDA Ý tưởng chính của thuật toán nằm ở chỗ xét dấu để quyết định điểm kế tiếp, và sử dụng công thức truy hồi
để tính bằng các phép toán đơn giản trên số nguyên
• Thuật toán này cho kết quả tương tự như thuật toán DDA
c Thuật toán MidPoint:
Ý tưởng
Giả sử tại bước thứ i ta có (xi,yi)
Gọi M (xi+1,yi+1/2)
F(x,y) = 0 là phương trình đường thẳng đi qua hai điểm
• Nếu F(M) <0, M nằm trên đường thẳng, ta chọn điểm dưới yi+1= yi
• Ngược lại thì yi+1= yi + 1
Xây dựng thuật toán
Ta có phương trình đường thẳng đi qua 2 điểm (x1,y1), (x2,y2)
Di+1= 2A(xi +1)+ 2Byi+1 + 2A + B + 2C
= 2Axi + 2Byi+1 + 4A + B + 2C
⇒Di+1=Di + 2B(yi+1 – yi ) + 2A
Có hai trường hợp xảy ra :
• Nếu Di >0 ⇒ yi+1 = yi +1 thì Di+1 = Di + 2B + 2A = 2Δy- 2Δx
• Nếu Di <0 ⇒ yi+1 = yi thì Di+1 = Di + 2A = Di + 2Δy
Đầu tiên ta phải xác định D1 bằng cách thay x1, y1 vào Di, ta có:
D1 = 2Axi + 2Byi + 2A + B + 2C = 2Axi + 2Byi + 2C + 2A + B
= 2A + B = 2Δy-Δx
Sơ đồ khối
Trang 31Ví dụ: Cho 2 điểm cụ thể hãy chạy thuật toán MidPoint để xác định các điểm trên đường thẳng qua 2 điểm
Putpixel(x,y)
D=D +2dy - 2dxD<=0
y =y+1 D=D + 2dy
Trang 32(x, y)
(x, -y)
450
(y, x)(-y, x)
(-x, y)(-x, -y)(-y,-x) (y, -x)
Các thuật toán vẽ đường thẳng nói trên đều vẽ đoạn thẳng có độ rộng 1 pixel, nét liên tục
Hai thuộc tính quan trọng của đường vẽ:
Độ rộng Vẽ đường thẳng từ (x0, y0) đến (x1, y1)
- Nếu dy>dx : Các pixel được vẽ bên trái và bên phải điểm vẽ (x-1 và x+1)
- Nếu dx>dy: vẽ thêm các pixel phía trên và dưới điểm vừa vẽ (y-1 và y+1)
Đường đứt nét
Phương pháp1: Vẽ một đường liền nét từ điểm đầu mút của đoạn thẳng tới đầu mút còn lại Sau đó quay ngược lại từ đầu tạo ra sự đánh lừa bằng cách thay đổi màu của đoạn thẳng trùng với màu nền tại các khoảng
Phương pháp 2:Tính các điểm đầu mút đoạn nhìn thấy và gọi thủ tục vẽ đoạn thẳng Xác định đầu mút đoạn tiếp theo và vẽ chúng Quá trình tiếp tục cho đến khi vẽ xong toàn bộ đường đứt nét
2.2.2 Thuật toán vẽ đường tròn
Tương tự như vẽ đoạn thẳng, đường tròn đồ họa hình thành bởi các pixel gần đường tròn toán học nhất (Rasterization)
Một vài tính chất cơ bản:
Vẽ đường tròn tâm tại gốc tọa độ sau đó dịch chuyển
đến vị trí mong muốn
Tính đối xứng: khi biết tọa độ 1 điểm dễ dàng suy ra
tọa độ của 7 điểm còn lại
Sử dụng phương trình để tính tọa độ đường tròn ->
dấu phảy di động
Bài toán : Vẽ góc phần tám thứ nhất của đường tròn
tâm tại gốc tọa độ bán kính R Trong trường hợp tổng quát điểm (x,y) được thay bởi 8 điểm
(x,y) : (x+xt,y+yt) ;(-x+xt,y+yt) ;(x+xt,-y+yt) ;(-x+xt,-y+yt); (y+yt, x+xt), (-y+yt, x+xt), (-y+yt, -x+xt), (y+yt, -x+xt)
a Thuật toán Bresenham
Ý tưởng
Giả sử tại bước thứ i ta đã xác định được (xi,yi)
Tại bước thứ i+1
Ta có xi+1 = xi +1
Gọi y là giá trị chính xác của tung độ tương ứng với điểm có hoành độ là (xi +1)
d1 là khoảng cách giữa yi và y
d2 là khoảng cách giữa y và (yi -1)
Khi đó nếu d1 < d2 thì yi+1 = yi
Ngược lại yi+1 = yi – 1
Xây dựng thuật toán
Trang 33Di+1= Di + 2(yi+12– yi2)+ 2(yi+1- yi)+4xi + 6
Có hai trường hợp xảy ra :
Nếu Di <0 ⇒ yi+1 = yi thì Di+1 = Di +4xi + 6
Nếu Di >0 ⇒ yi+1 = yi –1 thì Di+1 = Di +4xi - 4yi + 10 Đầu tiên ta phải xác định D1 bằng cách thay x1, y1 vào Di, Với x1=0, y1=R ta có:
D1 = 2yi2– 2yi + 2xi2+ 4xi +3 -2R2
= 3-2R
Sơ đồ thuật toán
Trang 34b Thuật toán MidPoint:
Ý tưởng
Giả sử tại bước thứ i ta đã xác định được (xi, yi), nhiệm vụ là cần xác định (xi+1,yi+1) tại bước thứ i+1 trong đó xi+1= xi+1
Gọi M(xi+1, yi-1/2) và F(x,y) =0 là phương trình của đường tròn
Nếu F(M)<0 thì M nằm trong đường tròn ⇒ yi+1=yi
Nếu F(M)>0 thì M nằm ngoài đường tròn ⇒ yi+1=yi – 1
Xây dựng thuật toán
Ta có phương trình đường tròn tâm tại (0,0) bán kính R
Putpixel(x,y)
D=D+4x-4y+10 D<0
y =y-1 D=D + 4x+6
Trang 35Pi+1 = Pi+2xi+3 + (yi+12 -yi2) – (yi+1 - yi )
= Pi+2xi+3 + (yi+1 - yi )(yi+1 + yi -1)
Có hai trường hợp xảy ra :
• Nếu Pi <0 ⇒ yi+1 = yi thì Pi+1 = Pi + 2xi+3
• Nếu Pi >0 ⇒ yi+1 = yi –1 thì Pi+1 = Pi + 2xi - 2yi +5
Đầu tiên ta phải xác định P1 bằng cách thay x1, y1 vào Pi, ta có:
Putpixel(x,y)
D=D+2x – 2y + 5 P<0
Trang 36procedure MidpointCircle(radius, color: integer);
{Giả sử tâm đường tròn tại gốc tọa độ}
var x, y: integer; P: real;
P:=P+2*(x-y)+5; x:=x+1;
Cho phương trình đường tròn x2+y2=25
Ta xác định được điểm ban đầu là x=0, y=R=5
Trang 37Bài toán: Cho Elip chuẩn có tâm tại (0, 0) với độ dài trục chính là 2a và trục phụ là 2b,
hãy thực hiện vẽ Elip với chiều dài hai trục đó
Phương trình elíp có tâm tại gốc tọa độ
Tìm ranh giới hai miền trong 1/4 Elip
Vị trí: Điểm P là tiếp điểm của tiếp tuyến có hệ số góc –1
Xác định:
Véc tơ vuông góc với tiếp tuyến tại tiếp điểm -> gradient
Tại P1 các thành phần i và j của véc tơ gradient có cùng độ lớn
Trong vùng 1: Với điểm (xi, yi) là điểm hiện thời thì trung điểm được xác định tại (xi+1,
yi –1/2), điểm tiếp theo sẽ trùng với E hoặc SE,
Nếu trùng với E phương trình có dạng
Thành phần i
Vector tiếp tuyến=-1E
F i x
F y x gradF( , ) =2 2 +2 2
∂
∂+
∂
∂
=
Trang 38Với điểm (xi, yi) là điểm hiện thời thì trung điểm được xác định tại (xi+1/2, yi –1), điểm
tiếp theo sẽ trùng với E hoặc SE,
Nếu trùng với SE ( x tăng 1, y giảm 1)phương trình có dạng
Để xác định giá trị đầu tiên của quá trình tính toán, giả sử a, b là số nguyên và điểm
khởi đầu của quá trình tính toán là (0, b)
procedure draw_ellipse(a, b, color: integer);
var x, y: integer; d1, d2: real;
2 2
2
2
2 2 2 2
2 2 1 2 2
1
)1(4
)1()()1,
(
b a y
a
b x
b
x
b
b a y
a x
b y
x
F p p
−
−+
=
−
+
Trang 392.3 Thuật toán tô màu
Một trong những ưu điểm của màn hình raster là khả năng lưu trữ, copy và tô màu một vùng tập của các điểm ảnh theo 1 màu hay 1 mẫu tô xác định Trong khi đó khả năng này của các thiết bị vector bị hạn chế khá nhiều do các vùng tô màu phải tạo ra bởi các tập đoạn thẳng sát nhau nên làm chậm quá trình làm tươi của màn hình
2.3.1 Giải thuật tô màu loang
Ý tưởng:
Giải thuật được bắt đầu từ một điểm trong vùng cần được tô màu với tọa độ x và y Việc xác định màu điểm thông qua hàm getcolor(x,y)và việc tô màu điểm thông qua hàm setcolor(x,y, color)
Trang 40Bước tiếp theo sau khi tô màu điểm (x,y )là kiểm tra thuộc tính màu của các điểm lân
cận, nếu các điểm lân cận đã được tô màu hay màu của chúng là màu đường biên thì
tiến trình kết thúc
Các điểm lân cận được xác định là các điểm là các điểm 4 láng giềng (0, 2, 4,6)
Các điểm lân cận là 8 láng giềng (0,1,2,3,4,5,6,7)
Thuật toán như sau:
Void Floodfill (int x, int y, int B_color, int F_color)
{
int color = getcolor(x,y)
if (color = = B_color) || (color = = F_color) return;
Else setcolor(x, y, F_color); Floodfill (x - 1, y, B_color, F_color);
Floodfill (x + 1, y, B_color, F_color);
Floodfill (x , y - 1, B_color, F_color);
Floodfill (x , y + 1, B_color, F_color);
}
2.3.2 Giải thuật dựa theo dòng quét
Ý tưởng:
Giải thuật dựa trên ý tưởng sử dụng 1 đường quét trên trục y của màn hình đi từ ymax
đến ymin của vùng cần được tô màu Với mỗi giá trị y = yi đường thẳng quét cắt các
đường biên của vùng cần tô tạo ra đoạn thẳng y = yi với giới hạn x thuộc[xmin- xmax]
Trên đoạn thẳng đó chúng ta sẽ tô màu các điểm tương ứng đi từ xmin->xmax Các
điểm cần tô màu sẽ là (xi, yi) thuộc đoạn thẳng y=yi nói trên nói trên
Phép tô màu hình chữ nhật với giải thuật Scanline là phép tô màu đơn giản nhất bởi
đường quét yi ta đều thu được hai giá trị xmin và xmax như nhau, giải thuật được mô
tả theo 2 vòng lặp For
Giải thuật scanlineRectangle (x0,y0,x1,y1, color)
x0,y0,x1,y1 : Tọa độ 2 đỉnh của hình chữ nhật
color : mầu tô
i,j : biến trung gian