VIEN DAI HOC THUY SAN
vi! HOM NHA XUAT BAN TRE 1995
Trang 3
LÒI GIỚI THIỆU
2 6 hoa vi tính là một lãnh vực làm mọi người say mê trong ngành khoa học vị tính Nó được áp đụng rộng rãi như là một công cụ thông tin bằng những hình ảnh trong nhiều lãnh vực khác nhau thuộc về khoa học và kỹ nghệ, y khoa, kiến trúc và giải trí Các chương trình đồ họa
ứng dụng cho phép mọi người làm việc với các máy vi tính
trong một phong cách tự nhiên ; người sử dụng có thể áp dụng
các đữ kiện lập trình bằng mọi phương tiện sẵn có và sau đó nhận lại các thông tin bằng hình ảnh
Tuy nhiên, muốn đạt được những điều này, người sử
dụng phải có kinh nghiệm tối thiếu khoảng nửa năm về các chương trình vi tính với ngôn ngữ tân tiến như Pascal, C hoặc
Fortran Một vài kinh nghiệm với các cấu trúc dữ liệu cơ bán như cách sắp đặt chương trình mạch lạc cộng với niềm say mê, đồng thời với sự thấu triệt về toán học các đồ bình và lượng giác hình thì rất dễ tiếp cận với chương trình này
Ngoài ra, đô hoa vỉ tính còn được áp dụng vào các lình vực :
* Trinh bay những hình ảnh mẫu còn được gọi "bình
ảnh thương mại” Phân này có rất nhiều với những sản phẩm
Trang 4° Hệ thống họa hình được áp dụng cho phép người sử
dụng làm việc như một nghệ sĩ với sự trợ giúp của máy vi tinh
+ Đưa ra các dữ liệu thuộc về khoa học dưới dạng chuẩn xác liên quan đến các nguyên tố khó có thể nhìn thấy được
* Thiết kế các mạch logic ứng dụng thuộc lĩnh vực -
_ điện tử như chương trình CAD
» Thiết kế các chương trình thuộc lĩnh vực kiến trúc * Thiết lập các cấu trúc về cơ động học
" Vẽ các đồ bản và hình ảnh hoạt kê
" Hình thành hệ thống kiểm soát cho một dây chuyên sản xuất hoặc một nhà máy -
* Ấp dụng hình ảnh không gian 8 chiêu khi tạo mẫu
* Tạo một biểu tượng trong một lĩnh vực nào đó
Tóm lại có thể nói rằng lập trình đô hoạ hiện đang
được áp dụng rộng rãi trên mọi lĩnh vực và đồng thời tiết kiệm
được rất nhiều thời gian cho các nhà tạo mẫu và kiến thiết Trong quyển sách này, tác giả trình bày một số chương trình ứng dụng đồ họa cơ bản, một số thủ tục lập trình
cũng như các hình ảnh, giác đồ để bạn làm quen với những
thủ tục, các hàm lập trình trong ngôn ngữ đô họa để tạo một
nên tảng và dựa vào những cơ sở đó mà minh họa thêm các -
Trang 5LẬP TRÌNH ĐỒ HỌA - C THIẾT BỊ I ĐẠI CƯƠNG :
Trang 6
LẬP TRÌNH ĐỒ HỌA
ta đưa ra được một thiết bị chính, một thiết bị độc lập để vẽ lên một đường thẳng giữa 2 điểm đã định Áp dụng
phương cách riêng lẻ này, chúng ta có thể tạo ra được các hình ảnh phong phú đáng ngạc nhiên txem hình) Vì đồ
hoa vi tính là một đô hình mạnh, nhiều quan niệm và kỳ
thuật quan trọng được minh hoa bang nhimg nét về từ các đường thắng đơn giản
II CÁC THIET BI DO HOA:
Có rất nhiều thiết bị để thể hiện, trình bày các
hình ảnh như máy in màu cũng như đơn sắc, in bản kẽm cũng như ¡in trên giấy Các loại khác cũng quan trọng cho lập trình viên là máy quét (Scan) Các chương trình kỹ thuật có khuynh hướng để làm khác đi tính năng của những loại này, thường tạo cho nó khó viết lên được một chương trình độc lập thuần túy
1/ Line drawing Display :
Loại này chỉ vẽ được những đường thẳng và có 2
loại: Pen Plotter va Vector Refresh Display
a/ Pen Plotter :
Trang 7LẬP TRÌNH ĐỒ HỌA
để xác định điểm vẽ đầu tiên, sau đó bắt đầu tạo nên một
nét vẽ thẳng đến điểm thứ nhì trên đường vẽ tạo nên một đoạn thẳng Cách thể hiện đường thang nay tạo nên một
hệ thống liên kết phức hợp như hình vẽ
Trang 8LẬP TRÌNH Đơ HỌA
Những nét vẽ này được kiến lập dựa theo các cú
lệnh Mỗi cú lệnh được xem như một mã trong một vài kiểu dáng nào đó ; vì thế khi máy nhận được mã lệnh nó
có thể đáp ứng ngay lập tức Thí dụ như các lệnh :
Pen_Up; « nhấc bút vẽ
Pen Down; ôâ h bỳt bắt đầu vẽ Go To(x,y); © di chuyển bút vẽ đến (x,y)
theo một đường thẳng Get Pen (i); < déi but vé hién hanh với
but vé# i
Ghi nhận rằng các cú lệnh giống như các lệnh "Mode setting’ khi may nhan được lệnh, nó thay đổi trạng thái của hệ thống chuyển cơ cho đến khi nhận được
được một lệnh khác Cụ thể khi máy nhận được lệnh Pen Down, máy sẽ thực hiện lệnh này và sẽ đổi trạng thái khi nhận được lệnh Pen Ứp Tương tự, khi lệnh Get_Pen (2) _
được cài vào ở chế độ màu cho bút vẽ số 2 Ngoài ra, bút vẽ luôn luôn ở vị trí hiện hành nơi lệnh cuối cùng Go 7o
được phát đi Một vài máy vẽ khác không tự động duy trì đường vẽ ngay tại vị trí hoặc ở trạng thái hiện hành và điều này ảnh hưởng đến cách lập trình để điều khiển và kiểm soát chúng
Thiết bị vẽ phải nhận được các trị (x,y) trong chính hệ thống kết hợp của nó được gọi la" céng cu két
Trang 10LAP TRINH BG HOA
b/ Vector Refresh Display :
Một thiết bị vẽ khác cũng quan trọng không kém dựa vào đèn hình (CRT) la Vector Refresh Display Thiét
bị này được gọi như vậy vì chính chế độ vẽ của nó chỉ có thể vẽ nên những đường thẳng hoặc những Vector
Những tên khác còn được gọi như "Stroke", "Random Scan" và "Calligraphic" Tia điện tử được quét trong một
đường thẳng từ một điểm này sang điểm khác trên màn
hình Khi tia điện tử được kích khởi, nó đập vào các lớp phosphore theo hướng tia điện tử phóng đi và trên màn
hình sẽ hiện ra vệt sáng dài tùy theo các biến trị để chỉ định với một vận tốc 60 lần/giây Với một tỷ lệ vận tốc này, mắt thường đủ giữ được cảm quan khi nhận định và
theo đãi hình ảnh được vẽ lên
Loại này thường được dùng vào các ứng dụng
chương trình cao một khi các hình ảnh phải thay đổi
nhanh chóng Thí dụ như chương trình ứng dụng đề án
kiến trúc (CAAD), các họa viên thiết kế muốn xoay hình ảnh một tòa nhà đang thiết kế để xem ở mọi góc độ Vì thế, ngày nay các máy này thường được thiết lập thêm bộ phận DPU (Display Proccessing Unit) để thực hiện và đáp ứng theo nhu cầu của người lập trình với chất lượng
cao Theo hình trên, đường Vector được thể hiện trên
màn hình tùy thuộc vào dung lượng giá trị của bộ nhớ với Display File và chứa các cấu trúc sơ đẳng như :
ˆ MCV 34,127 {move to (34,127)}
Trang 11LẬP TRÌNH ĐỒ HỌA i IN? 12 {Set intersity to level 12} 2 MOD 56,213 9 JUMP 4 {Jump back to instruction 9 to Repeat} có nghĩa là đi chuyên (MOV) tia điện tử đến điểm đã chỉ định x và y (34,127) được chỉ định chính mật độ
(NT) đến giá trị đã định ke tiếp (12) và v v Máy sẽ đọc ngay lập tức các lệnh này và điều khiển các tia điện tử theo các lệnh dé Cu lénh cuci cung la Jump (JUMP 0) để lệnh cho máy thực hiện dòng lệnh kế tiếp từ vị tríØ, điểm khởi đầu của Display File và tiếp tục cho toàn bộ chu trình tính lập Các bình ảnh có thẻ thay đổi bởi cách ứng dụng của phần chủ Nó gởi di các lệnh để tai di liệu
mới vào trong Digplay Fie và hình ảnh thay đổi ở chu
trình kế tiếp
a
2- Raster - Scan Display :
Đây là một loại thiết bị khác thể hiện các hình
ảnh Raster Display tạo nên các hình ảnh từ những điểm
màu không thấy được hơn là những đường thẳng Mỗi điểm này gọi là Pixel Các ký tự được thể hiện dưới dạng biểu đồ bằng những điểm Những đường thẳng và cong_ được minh họa bằng một sự nối tiếp của những pixel va
Trang 12LẬP TRÌNH ĐỒ HỌA
các khu vực trên màn hình được lấp đầy màu sắc Các pixel trong khu vực này được tô lên các màu sắc đã chỉ định Bits in Memory - Spots on Screen 0 [0/0 Hình 1-4 Sự tương quan giữa hình ảnh và cách thực hiện
Hình ảnh sau đây minh họa cho cách thể hiện của loại thiết bị này Mỗi pixel được thể hiện bằng các bit hoặc "ON"(đen) hodc "OFF" (trắng) Hình ảnh được lưu giữ hoặc "đệm"trong một không gian bộ nhớ gọi là "Frame Buffer" Có sự tương hợp trực tiếp giữa mỗi pixel trong cách thể hiện và một bit của bộ nhớ trong Frame Buffer Néu gid trị đã chứa trong bit là 0, các pixel tương ứng sẽ thể hiện dưới dạng màu trắng và nếu đó là 1 thì
Trang 13LẬP TRÌNH ĐỒ HỌA
sẽ la đen
a/ Scanning Process :
Đây không phải là trường hợp đối với loại Raster
Scan một khi các tia quét hoạt động độc lập với nhau
Các hình ánh được quét theo từng dòng từ trên xuống
dưới (như thực hiện trong máy T.V) Hình dưới đây minh họa cách hoạt động của loại này Beam on a ———- — |` Beam off No During : oS Retrace ` \ |
Last Scan Line
Hình 1-5 Tia quét tir trén xuéng dudi
Trang 14
LẬP TRÌNH ĐỒ HỌA Mỗi vị trí của tia điện tử tương ứng với từng pixel va nhtmg gia tri cla cdc pixel này được lấy ra từ Frame Buffer dé dong bé véi vi trí của tia điện tử Mật độ chuẩn trên màn hình giữ các gid tri bit tir Frame Buffer
tại một thời gian nào đó và đối chúng thành các trị cường Đối với các hình ảnh, nó sẽ quét nhiều lần trong
một giây Vì thế có nhiều yếu tố phải được cân nhắc khi tiến hành các phương cách scan như : tỷ lệ, kích thích các
lớp phosphore bởi các tia điện tử và phương pháp quét
Đối với thiết bị có giá trị cao, tỷ lệ quét rất nhanh,
thường là 60 lần/giây, còn ngoài ra thì chỉ khoảng 30
lần/giây Vấn đề trở ngại ở đây là càng ở gần phía trên cùng màn hình thì hình ảnh lại bắt đầu mờ đi trong khi
một nữa ở phía dưới lại bị quét sạch và ngược lại
Có hai phương pháp để giải quyết điều này : thứ
nhất là dùng một lực tác động mạnh vào các lớp
phosphore bằng cách duy trì độ sáng thích hợp khi pixel đó được kích ở chu trình kế tiếp, nhưng điều này sẽ tạo nên các đốm nếu những hình ảnh đó được thay đổi nhanh
chóng như khi một con" chạy nhanh trên màn hình
Khu vực sáng còn lại sẽ để lại một “cái đuôi ánh sáng" ở phía sau khi nó di chuyển trên màn hình có thể làm hoa mắt người sử dụng
Phương pháp thứ nhì là áp dụng cách quét chéo
Trang 15LẬP TRÌNH ĐỒ HỌA
1/60 giây kế tiếp Bởi vì cập mắt cảm nhận và pha trộn ánh sáng trong các đường thẳng kể nhau thì các nét thoáng sẽ ít hơn Odd Scan Lines ¬>x _ > Scan Lines s J
Hình 1.6 Phuong phap quét chéo b/ Multiple Intensity/ Color Raster Display :
Trang 16LẬP TRÌNH ĐỖ HỌA
hiện các trị của pixel sang cdc phan điều khiển tương
ứng Hình 1-7 sau đây cho thấy các vị trí các thông tin
cho 6 bit đối với từng pixel 6 Planes : (6 bits/pixels) Frame Buffer LO = 9 Red at ®9 Sn Blue
Hình 1-7 Sự điều hành màu 6 bit/pixel
Day duoc goi la 6 bit/pixel cha Frame Buffer,
hoặc cũng có thể gọi là có "hoành độ 6 bit" của bộ nhớ
trong Frame Buffr, 6 bit đặc trưng cho các trị của pixel
có thể thực hiện được 64 trị màu Trong thí dụ này, cứ mỗi 2 bit được truyền thẳng đến màu xanh của CRT, hai bit cho màu đỏ và hai cho màu xanh Vì thế mỗi ống phóng màu có thể thực hiện được 4 qui cách màu, cụ thể :
Trang 17LẬP TRÌNH ĐỖ HỌA Bit Value Relative Intensity Oo | 0 (Den) 1 73 (M8) 10 2/3 (Sáng hơn) 11 -1 (Sáng nhất)
Các giá trị thuật số (10) digital được đổi thành
các trị Analog (2⁄3) do chính mạch Digital to Analog
Converter (DAC) mà các công cụ điện tử được thiết kế để đổi các trị logic thành các trị điện áp Mỗi ống phóng màu
có mét mach DAC va cdc mật độ của tia điện tử được
truyền tải bởi chính điện áq của DAC Bởi vì mỗi ống phóng đều có 4 cường độ thích ứng tại đây, 4 x 4 x 4 = 64 màu khác nhau có thể được thể hiện Giả định như một pixel được cho ra chứa các trị 011100 Màu sắc cho pixel
này được phát đi khi :
Trang 18LẬP TRÌNH ĐỒ HỌA Vì thế, màu sắc đã thể hiện với sự pha trộn của một màu lục sáng và một chút ít đỏ để trở thành hung sắc vàng
Còn bảng biểu sau đây là một thí dụ của trường hợp 3 'bit/pixel, cung cấp giá trị 2 x 2 x 2 = 8, mỗi màu sắc trong bảng biểu được thể hiện bằng 6 bit, cứ mỗi hai bit cho một ống phóng màu đỏ, lục và xanh Với các thí dụ ở bảng biểu này, nếu một pixel chứa giá trị 2, các giá trị truyễn đến bộ hoán đổi D/A sẽ là 11 (sáng) cho ống phóng tia đỏ, 00 (tất) đối với lục và 10 (sáng hơn) đối với xanh Màu sắc thể hiện vì thế có sự pha trộn giữa đô và
Trang 19“yo
oe
LẬP TRÌNH ĐỒ HỌA
Đối với b bit/pixel thì bảng màu sẽ có chiều dài 2°, Có nhiều trạm màu hỗ trợ cho 8 bit/pixel và vì thế có đến 256 ngõ nhập và có thể hiện màu khác nhau Hay nói một cách khác, khung trạm màu là tổng trị của các màu sắc khác nhau mà nó có thể hiện ra Điều này được cố định bởi các số lượng của các bit màu truyền đến bộ D/A Thí dụ cứ mỗi 6 bit truyền đến bộ hoán đổi D/A và lúc đó có đến 2(6) = 64 màu có thể được thể hiện Ngoài ra mạch hóan đổi LUT (Color Lookup Table) có thể truyền 8 bit đến mỗi ống phóng sao cho 24 bit được xác định mỗi màu như một trạm màu có 2(24) = 16 triệu màu - mặc dù chỉ có một số lượng nhỏ - 256 - có thể hiện ra
cùng một lúc
c/ Hard Copy Raster Device:
Nhiều loại máy in bang kẽm dựa trên khái niệm sóng quét Mỗi loại vẽ các hình ảnh bằng sự trao đổi từ sự thông tin từng điểm một (dot by dot) của Erame
Buffer thanh cdc gid trị trung bình của nó
* Film Recorder : Dugc thé hién bang nhiều để biểu sọc và tia điện tử sẽ bắn vàp phim khi quét trên đỗ biểu đó Đây thường là loại phim
ảnh 35 ly dùng vào các mục đích thương mại * Laser Printer : Máy in laser có thể quét các
Trang 20LAP TRINH BO HOA
laser thường đưa ra những hình ảnh có chất
lượng cao hơn các máy in khác
+ [nk-Jet Plooter : Loại máy in bằng cách phun
mau dua ra những bản kẽm của ảnh màu Một
- ống nhỏ đựng mực quét trên giấy và phun ra _ những màu mực tại mỗi vị trí của pixel
3/ Phần điều khiển của Frame Buffer :
Frame buffer tiêu biểu một giá trị lớn trong bộ nhớ Nếu một hình ảnh có kích thước là R x C (R = dòng và C = cột) và có b bit/pixel thi bộ nhớ cần thiết sẽ là R x exb bit Một hình ảnh có chất lượng cao có thể có R =
1024, c = 1024, và b = 24 đòi hỏi 1 dung dung lượng 25
triệu bit hoặc 3 MB Trong vài hệ thống, Frame Buffer thật sự là một phần của bộ nhớ trong máy Các thành
phan này gọi là bit mapped hoặc Memory mapped Máy
có thể thực hiện từng pixel riêng lẻ bằng cách đọc và viết để chỉ định vào chính không gian trong bộ nhớ như là chuyểntải có nghĩa là thí dụ như tải giá trị A và trong bộ
nhớ tại vị trí B
Để thuận lợi, máy sẽ tạo một tuyến tính Set
Pixel (Row,Col A) và chỉ định địa chỉ trong bộ nhớ cho
pixel tai (row, col) va tai tri của.pixel A và địa chỉ đó Dé thực hiện được điều này, ngay tại chương trình con Procedure, ta phải khai báo một cách rõ ràng để hướng s các đường vẽ theo đúng chiều đã định
Trang 21out, LẬP TRINH DO HOA
PROCEDURE SDline (kow 1, col 1, Kew 2, col 2, colcr : Interger'; {Draw a line from ‘col 1, Row i} to
(col 2, Row 2) in the given color} {Special case : assumes the line has
Ssl@e between -1 and +1, anh that - e@ol 1 <= col 2} VAR dy, ax, n, m: Real; x : Interger; BEGIN dx := col2-coll; dy := Row2-Rowl; m := dy/dx; y := Rowl; FOR x:= coll TO col2 DO BEGIN Set piếc! (x, Round (y), color); Y := Y‡m ENT; END;
Có nhiều máy hoặc thiết bị kiểm tra là các vệ tỉnh (có nghĩa là lệ thuộc hoặc trợ ích) trong những
EFrame Bufer và Video Monitor được chứa trong các bộ
Trang 22LẬP TRÌNH ĐỒ HỌA
Các máy hiển thị này chứa đựng các ROM và bộ nhớ
đệm Các ROM chứa những thành phần tiện ích gồm các
phiên bản của DD line () Bộ nhớ đệm kết hợp với bộ vi xử lý có thể giữ các tố chất này ngay tại vị trí hoặc màu sắc hiện hành Chương trình ứng “*›ag gởi đi các lệnh
đến các công cụ khác với một ngôn ngữ riêng của nó (dưới dạng chuỗi ký tự) Bộ vi xử lý hoạt động như một máy
phiên dịch và điều hành ở một trị thấp, tạo nên các sự
thay đổi tỷ lệ trong Frame Buffer và từ đó hiển thị các đỗ hình
Cụ thể, một vài lệnh cơ bản mà loại Raster Technologies model (RTM) 1/25 phién dich bao gém :
" DRWABS x,y : Vẽ đường tiếp tuyến từ vị trí hiện hành đến tọa độ x, y * MOVABS x,y : Di chuyển từ vị trí hiện hành đến tọa độ x, y * CLEAR : Phủ đầy màn hình với các trị của pIxel hiện hành
* CIRC XY Rad : Vẽ một vòng tròn theo góc độ Rad từ khoảng vị trí hiện hành
Còn đối với các ví dụ khác, những thiết bị khác nhau chuyển tín hiệu đến REGIS (Remote Graphic 7 Instruction Set) Khi 6 Graphics Mode REGIS dap lai Đ
:
22
Trang 23LẬP TRÌNH ĐỒ HỌA cho chuỗi ký tự như : p {230,45} v {280,80} P {100,50} T 'Hello World'
Cé nghia la P { 230,80} duoc dinh vi tai vi tri
hiện hanh { 230,45} trong thiết bị kết hợp và V ( 280,80)
vẽ lên một Vector từ vị trí hiện hành ( 280,80) và sau đó chuyển tiếp từ vị trí hiện hành sang giá trị mới này Hằng chuỗi trên sau đó viết lên nội dung "Hello World"
ngay tại vị trí ( 100,50)
Nếu trên đường liên lạc giữa máy chủ đến các máy phụ tín hiệu đến chậm, người lập trình muốn gởi đi các lệnh vắn tắt để các thông tin truyền đi nhanh hơn thì
các lệnh như DRWABS x,„y đòi hỏi nội dung được phat di
- t nhất là 10 ký tự hoặc nhiều hơn nếu như các trị của x,y yêu cầu phải có nhiều vĩ số thập phân Còn nếu như trên đường truyền tin hiéu chi 120 ký tự/giây thì thời gian truyền tải sẽ đài hơn -
ill DEVELOPING DEVICE DRIVERS :
Trang 24LẬP TRÌNH Dd HOA
thiét bi Raster thì có các lệnh khai bdo Set Pixel, DD line
hoặc nhu la DRWABS va P Trong mọi trường hợp, các
thiết bị kết hợp phải gởi các lệnh đến thiết bị và mỗi thiết bị đều có chính hệ thống kết hợp của nó
Chính các điều này tạo thêm hai vấn để phức tạp Thứ nhất rất khó truyền đạt các dữ liệu và phương
sách mà không vướng phải các sai lầm và bị sa lay trong
các chỉ tiết Thứ hai là cũng khó hồi đáp các đáp án ứng dụng cho một thiết bị sao cho nó có thể truyền dẫn đến các thiết bị khác Vì thế, chúng ta phải "dấu đi" các chi tiết của từng thiết bị vào trong "đường truyễn tín hiệu"
dưới dạng ứng dụng trực diện Đặc biệt, chúng ta cần khai báo một chương trình con PROCEDURE như Draw
line (x,, Vy» Xp VỤ Real); dé vé lén một tiếp tuyến từ điểm (X,Y, ) đến (x,, yy
Một phiên bản khác của Draw line () được viết cho mỗi thiết bị - mã bên trong Draw line () là thiết bị đặc biệt được chỉ định và nhắm đến các hệ thống kết hợp
với thiết bị khác, nhưng cách ứng dụng lại áp dụng cho tất cả bởi cách khai báo trong Draw line () và vì thế xem như là một thiết bị độc lập với đường lệnh Vì thế, các
sách ứng dụng đã được viết lên mà không lưu tâm đến các thiết bị khi vẽ lên các dé hình Cho nên, khi đến thời điểm để kích hoạt sự ứng dụng vào thiết bị đã chỉ định,
.các phiên bản thích hợp của Draw line () được chèn vào
và chương trình được phiên dịch và máy hoạt động
Điều gì sẽ xảy đến đối với các thiết bị độc lập
Trang 25LẬP TRÌNH ĐỒ HỌA
này ? Ngay tại các điểm đâu cuối (x,,y,) và (x,,y„) được
khai báo bằng biến Real với các giá trị tiện ích, nhưng lại bị hạn chế trong một khoảng để vừa khớp với khuôn khổ của thiết bị đang được dùng Một vùng vuông vức trong khoảng (x,y) được chọn để đồng dạng với khoảng (x,y) của thiết bị; lúc đó mạch GKS sẽ xác định một trị trung bình khi vùng vuông góc tại góc thấp trái (0,0) và góc phải
trên (1,1) như hình vẽ (h-1-8)
Vì thế, đối với mọi điểm (x,y) trong NDC thì cả hai điểm x và đều nằm ở giữa ) 0 và 1 AY OQ - Yq) Display ⁄ % ~¥y ) x ] x Hinh 1-8
Để ghi nhớ khoảng cách đã dùng, chúng ta nên
thoát khỏi DrawLine và cài vào đó một tên giả định NDC
,
Trang 26LẶP TRÌNH ĐỖ HỌA
cho chương trình như :
&
PROCEDURE Line NDC (x1,y1,x2,y2:Real) ;
{Draw a line from (x1,y1) to (x2,y2) in
NDC
Use a different version for each device
All ver sion look like this to
application}
Ở hình 1-8 nêu trên cho thay ring Line NDC có
các giá trị kết hợp nằm trong NDC và vẽ lên tiếp tuyến
tương ứng trên màn hình nhựng lại được đặt ở đâu? Thường thì LineNDC () vẽ một đơn vị hình vuông của NDC một khoảng rộng lớn trên màn hình gần vào giữa
Các hình ảnh được vẽ bên trong NDC vì thế được thể
hiện bên trong hình vuông đó theo một kích thước khác nhưng không sai hình dáng
Có một thí dụ dụ khác trong khai báo Line NDC
() là Box () để vẽ lên một hình vuông có các cạnh góc đối điện tại (x1,y1) và (x2,y2) và có các cạnh ngang va doc
như sau : ,
PROCEDURE BOX (x1, yl,x2,y2:Real);
{Draw a box with one corner at (xi,yl) and opposite corner at (x2,y2)}
BEGIN :
Trang 27LẬP TRÌNH ĐỒ HỌA Line NDC- (x2,y1,x2,y2); Line NDC- (x2, y2,x1,y2) ; Line NDC- (x1,y2,x1,y1); END; {Box}
1/ Cai NDC vao Device :
Mỗi hiện thân cta Line NDC () phải cài đơn vị
bình của NDC cho khối vuông lớn nhất trên bề mặt của thiết bị được gọi là Device Square Đó chính là ở mọi điểm P được đưa ra P=(x,y) trong NDC, chúng ta cần trắc định thiết bị kết hợp tương xứng Q=(dx,dy) trong Device
Square (Xem hình 1-8), Sự cài đặt nên tương hợp với
nhau ở một tỷ lệ, đó là nếu như x ở vào khoảng 40% theo
hướng từ trái sang phải của NDC thì sau đó dx cũng nên
là 40% theo hướng từ trái sang phải của khối vuông lớn nhất Tương tự, khi y=0,1, dy phải là 10% theo hướng từ dưới lên trên Bởi vì tỷ lệ cài đặt được yêu câu thì dx phải là truyền tính tỷ lệ với x để sao cho :
dx = Ax+B (1)
đối với hằng A và B, và tương tự : dy = Cy+D (2) đối với hằng C và D
Trang 28LẬP TRÌNH ĐỒ HỌA
và chiều đọc trong khoảng từ dưới lên trên với giá trị từ 0 đến Ymax Như vậy nếu ding Xmax=10 va Ymax=767 (hình 1-9) và đây là thông số của máy ¡in TEKTRONIX
4662, chiểu cao Ymax thì nhỏ hơn kích thước của thiết bị
này và cho nên sẽ tìm ra kích thươc của hình vuông
Ymax, by, Ymax Trung điểm chiều ngang của hình vuông phải nằm tại điểm giữa của thiết bị tại tọa độ X(max/2
Còn đối với chiều rộng của Ymax, hình vuông sẽ tiếp cận
gần tọa độ Ytmax/2 đến bên trái và Ytmax /2 đến bên phải so với tâm điểm Vì thế khi Y(max) < x(max) chúng ta sẽ tìm được góc trái trên và góc phải dưới nằm tại :
Trang 29LẬP TRÌNH ĐỒ HỌA
Còn đối với thình 1-10), với những giá trị này lại
làm tròn cho (128,767) và (895,0)
Bây giờ ta tìm hệ số A và B ở biểu thức (1) Áp
dụng thực tiễn rằng x=0 cài vào dx=128 để duy trì điều kiện 128=B ở biểu thức (2); và tương tự, duy trì 895=A+B từ thực tiễn rằng x=l cài vào dx=895 Kết hợp các thông số này lại, chúng ta nhận được các giá tri A=767 va B=128 Cũng với những yếu tố này được áp dụng để duy tri C=767 va D=0 Vi thé, toa dé NDC (x,y) cài cho :
dx=767x+128 dy=767y
Biểu thức này kiểm tra tại góc cạnh Cụ thể khu vực chính (dx,dy) = (128,767) tạo tọa độ (x,y)=(0,1) Nó
cũng kiểm tra tại tam diém cha NDC: (x,y) = (0,5, 0,5)
bao ham (dx,dy) = (511.5, 385.5)
Với các thông tin này, chúng ta có thể vận dụng phiên bản của Line NDC (), chung cho vị trí của các thiết
bị:
* y tăng (từ dưới lên trên) từ điểm 0 đến Ymax * x tang (từ trái sang phải) từ điểm 0 đến Xmax
" Ymax < Xmax
Trang 30LẬP TRÌNH ĐỒ HỌA A dy Largest Square Region y 767 NDC pen a we ee een ] x 128 895 1023
Hình 1-10 Cài NDC sang thiết bị khác
Như vậy, trong phần khai báo chương trình con PROCEDURE được thiết lập như sau :
Trang 31LẬP TRÌNH ĐỒ HỌA
đx1 := Round (Max Y * x1 +
offset);{do the mapping to}
dyl := Round (Max Y * yl); (the largest square} dx2 := Round (Max Y * x2 + offset); dy2 := Round (Max Y * y2); Pen_Up; ‘ GO_TO (dx1, đy1); Pen_ Down; GO_TO (dx2, dy2); END; `
Còn đối với hầu hết các thiết bị có chung dạng
chương trình Line NDC () thì cũng như nhau Có phần
phác họa để đổi các lập luận NDC sang quan niệm thiết bị, theo sau bằng các dòng lệnh để truyền các mã và các phiên bản của phần kết hợp đến thiết bị thực
Ghi nhận rằng cách áp dụng có thể dùng đường dẫn đạt này trong toàn bộ thiết bị theo phương cách độc lập Nó không cân biết đến các đô hình hiện trên màn hình Mọi tố chất được ẩn trong chính đường truyền đạt của nó Sự ứng dụng có thể đặt vào thiết bị chuẩn khác bằng sự thay thế một phiên bản Line NDC () khác để cũng đặt vào được trong khối vuông lớn nhất Không một ai cần quan tâm đến mã ứng dụng và mọi sự thay đổi của nó
Trang 32LẬP TRÌNH ĐỒ HỌA
2/ Ap dung Entire Display Area:
Khi một đường truyền đạt hạn chế chính nét vẽ khối vuông lớn nhất trên bề mặt màn hình, toàn bộ thiết
bị độc lập đều được thi hành như khu vực vẽ đầu tiên có
thể bị bỏ đi khi hầu hết các bề mặt được thể hiện bằng hình tứ giác hơn là một hình vuông Vài hình thì ngắn và rộng và những hình khác thì lại cao và hẹp Hình dạng của tứ giác được tổng hợp bằng chính tỷ lệ phức, tỷ lệ của chiều cao và rộng _ cao _ rộng Thí dụ, màn hình Tivi có tỷ lệ phức là R=0.75 và giấy in chuẩn 8 1⁄2 x 11 inch có tỷ lệ là 1.29 Bởi vì chúng ta thường gặp các thiết bị có tỷ lệ khác 1 và chúng ta không bao giờ muốn các thiết bị bó thừa ra các biên cạnh ngồi của hình vng lớn nhất
Để vượt qua sự giối hạn này, chúng ta có thể chọn để đổi lại các đại lượng khai báo trong Line NDC () sao cho nó có thể vẽ bất kỳ nơi nào trên màn hình Hình 1-10 sau đây cho thấy phương cách áp dụng cho loại thiết bị có tỷ lệ phức nhỏ hơn 1 Khái niệm cơ bản là hạn chế
cách ứng dụng của NDC thành một tứ giác R(NDC); có cùng một tỷ lệ R khi thiết bị đó hoạt động Một hình
Trang 33LẬP TRÌNH ĐỒ HỌA
Mot diém trong pham vi R(NDC) sé dat dén tri Line NDC () mới được vẽ lên trong R(Dev) và lúc đó, bất kỳ điểm
nào nằm trong phạm vi R(Dev) cũng đầu có thể vẽ được Aspect Ratio R ⁄ 26122 cee ! + x 7 ‘ t ' ‘ ' S —- a _ NDC
Hình 1-11 Trải rộng khu vực vẽ trên màn hình
Nét phác họa mới cũng áp dụng quan điểm chính
này Với biểu thức
dx= yMAX X + (Xmax - Ymax)/2
Trang 34LẬP TRÌNH ĐƠ HỌA ta có được : dx = Xmax X dy = Xmax Y
Ghi nhận rằng có vài giá trị đại lượng của thiết bị độc lập bị triệt tiêu khi chọn lọc bằng cách này Bây giờ sự ứng dụng phải hiểu hết các tỷ lệ phức của thiết bị và sự hạn chế của chính đường phác trong NDC Nhưng hầu hết các lập trình viên cảm thấy điều này chỉ là một cái giá nhỏ phải trả đối với sự tiến hành để đưa khu vực phác họa vào trong mỗi thiết bị
Ngược lại, vài thiết bị có thể lại cần biết tại thời thời điểm thao tắc đối với các trị Xmax và Ymax Cách ứng dụng là có thể dùng những điều này để đánh giá trị
R và bỏ qua thủ tục khai báo cho LineNDC
3/ DATA Type point :
Thông thường các lập trình viên muốn giữ lại các trị đại lượng kết hợp của x,y của mỗi điểm trong cấu trúc dữ liệu sao cho các điểm đó được thể hiện như là một đại
lượng đơn hơn là khi đại lượng bị phân chia Trong Pascal thi diéu này lại rất dễ dàng khi khai báo :
Trang 35LẬP TRÌNH ĐỒ HỌA
x,y : Real; END;
Thật là tiện lợi khi có một phiên bản của khai
báo Line NDC () để giữ điểm đầu cuối trong dạng này Để
thực hiện, chúng ta khai báo một tên khác như :
PROCEDURE Line NDC (p1,p2 : point);
{Draw a line from pl to p2}
Ca hai phương án dùng để cài đặt các điểm đều
tiện dụng Các ký hiệu khác nhau giữa Line NDC () và Line NDC () thì lại không gia nhập vào các phiên bản đang áp dụng nên có nội dung rõ ràng
IV CÁC NGUYÊN ẢNH VÀ THUỘC TÍNH :
Nhiều loại tranh ảnh hoàn chỉnh được vẽ trên màn hình đồ họa, nhưng lập trình viên lại nghĩ đến các thiết lập giới hạn đưa ra một hình ảnh vượt quá yếu tế ban đầu của hình ảnh, gọi là nguyên thủy (Primitives) Một hình ảnh nguyên thủy đưa ra là một phần ảnh được hỗ trợ trực tiếp bởi thư viện hình ảnh, Các thuộc tính tiêu biểu, thí dụ là một đường thẳng lệ thuộc chính vào :
" Màu sắc
» Độ rộng đường thẳng `
Trang 36LAP TRÌNH ĐỒ HỌA
* Loại đường thẳng : các gạch nối, đấu chấm huạc
một nét thắng
Đối với loại nguyên thủy, chúng ta qua sát đến các thuộc tính kết hợp quan trọng nhấ: khi cấu định bởi
tiêu chuẩn GKS
1/ Nguyên anh theo GKS :
Tiêu chuẩn nguyên anh cua GKS cung cấp 6 nguyên bản gồm các loại : * Polyline " Polymaker * Text « Fill area " Cell array * Generalized drawing Primitive a/ Polyline :
Trang 37LẬP TRÌNH ĐƠ HỌA
đường thẳng, mỗi đường thẳng được tạo lập bởi sự hình
thành của hai tọa độ (x.,yJ), (X,,Y,), (Xy,Yy) (KY de Thí dụ như hình 1-11 sau đây mô tả do 9 đường
thẳng kết hợp lại bắt đầu tại các tọa độ (0,4,02), (0,4,03), (0,5, 0,3), (0,5, 0,6) Y Hình 1-12 Thí dụ cụ thể của một Polylne Còn hình 1-13 trình bày các hình ảnh được cấu trúc từ nhiều Polyline,
Chúng ta gọi loại dữ liệu để miêu tả các Polyline là Polypoint để nhấn mạnh đó là tập hợp của các điểm,
danh xưng Polyline chứng tỏ nguyên ảnh tương xứng với
nhau Với cách ứng dụng lập trình, chúng ta bao gồm trong các cấu trúc dữ liệu đại lượng của các yếu tố đã được dùng trong khai báo biến ARRAY như :
Trang 38LẬP TRÌNH ĐƠ HỌA Hình 1-18 Vài hình ảnh của các Polylne Polypoint = RECORD num : 0 MaxVert; {number of point } pt : ARRAY (1 MaxVert) of point END; , Biến hằng MaxVert là chấp nhận trị lớn nhất cho các kích cỡ của Polyline và nên được khai báo tại phan đầu của phan ứng dụng như khai báo hang CONST MaxVert = 100
Giả sử Poly là một biến của phần khai báo TYPE Polypoint Một khi Poly num = 0 để chỉ một Poly rỗng
Néu poly num =1 thi polyline bao gém ca mét đơn điểm
Trang 39LẬP TRÌNH 16 HOA
kết thúc tại poly.pt(2) Vi thé poly chita tri (poly.num -1) thuộc đoạn thẳng đó Khi poly.num = 2 thi polyline gm’ có một đường thẳng
GKS cung cấp đường vẽ polyline, nhưng khi loại ảnh polyline không được áp dụng thì điều này rất dễ bao
gồm chính polyline của nó trong cách ứng dụng Như một đường thẳng có thể được thực hiện theo nhiều cách tùy
thuộc và đường vẽ cơ bản ngay tại thời điểm đó Thí dụ như có một phiên bản dưx vào Line NDC (p1,p2:point) để vẽ một đường thẳng giữa hai điểm như sau :
PROCEDURE Polyline XDC (poly: point) ;
{draw polyline poly} VAR i: INTEGER; BEGIN WITH poly DO IF nums1 THEN FOR i := 1 TO (num-1) DO Line NDC (pt [i], pt [i+1]) END;
Với các khai báo này thì sẽ không vẽ được gì cả
Trang 40LẬP TRÌNH ĐỒ HỌA
trong polyline được thể hiện cùng một màu sắc Nếu như muốn vài đường thẳng nào đó có màu sắc khác, bạn phải
đặt chúng vào các polyline phân định GKS sẽ cung ứng một đại lượng chương trình Function với khai báo Set Polyline Color Index () để miêu tả màu sắc cho đoạn thẳng này Nếu như không dùng GKS, bạn có thể thêm vào tham số Color cho khai báo Line NDC () để thực hiện
màu sắc chỉ định của đoạn thẳng đó
+ Line Type : Các đường thẳng có thể vẽ theo một biểu mẫu như đường nét, đường gãy đoạn, các dấu chấm hoặc bằng dấu chấm gạch Hần hết các thư viện hình ảnh có một bộ hình mẫu để có thể tham chiếu và lựa chọn và cũng thường được cấu tạo cho chính loại đó và dĩ nhiên được thể hiện ở các mã 1111 1100 1111 1100 trong
các biến Chuỗi mã 1 và 0 là bảng biểu của loại đường thẳng trong trường "hợp đường thẳng được thể hiện dưới dạng chuỗi gạch ngắn
* Line Width : Bạn có thể tạo vài đường thẳng có độ dày hơn những đường khác để nhấn mạnh hoặc gây sự chú ý đến điểm quan trọng của một vấn đề gì đó Để tạo
một đường thẳng có độ rộng gấp 3 lần so với các đường khác, thì phải vẽ làm 3 lần đối với đường thẳng đó tạo nên 3 phiên bản cho độ đậm nét của đường thẳng đó Mọi đường thẳng trong phạm vi một polyline có cùng một độ rộng như nhau
b/ Polymaker :