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

Đồ họa máy tính - Chương 5 Tô màu, Font chữ - Bài 16

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:6

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

Các thuật toán tô màu 1. Thuật toán tô màu hình thang cơ bản Giả sử cho hình thang cơ bản có dạng: (x4y4) (x3y3) (x1y1) Thuật toán nh- sau: (x2y2)

Chủ đề:
Lưu

Nội dung Text: Đồ họa máy tính - Chương 5 Tô màu, Font chữ - Bài 16

  1. Kü thuËt §å ho¹ m¸y tÝnh C¸c h×nh thang c¬ b¶n sÏ lµ c¸c h×nh giíi h¹n bëi c¸c ®o¹n th¼ng (P1,P2), (P3,P4) ......(P2n-1, P2m) vµ c¸c ®o¹n th¼ng thuéc c¸c c¹nh cña ®a gi¸c VÝ dô: Bµi tËp: W1 W8 W1 W5 1 2 2 3 3 W6 W2 4 W2 5 7 6 5 8 W7 W4 9 6 W4 W5 W3 W3 H·y diÔn ®¹t chÝnh x¸c thuËt to¸n trªn vµ lËp ch−¬ng tr×nh ph©n chia ®a gi¸c thµnh c¸c h×nh thang c¬ b¶n $16. C¸c thuËt to¸n t« mμu 1. ThuËt to¸n t« mµu h×nh thang c¬ b¶n Gi¶ sö cho h×nh thang c¬ b¶n cã d¹ng: (x3y3) ( x4 y4 ) (x1y1) (x2y2) ThuËt to¸n nh− sau: 1. §Æt ymin=y1; ymax=y3; m=ymax-ymin+1 2. tÝnh hÖ sè gãc Cl=(x4-x1)/(y4-y1) Cr=(x3-x2)/(y3-y2) 2. §Æt yi=ymin+(i-1) i = 1,m tÝnh x li = x 1 + (y i − y 1 ).C l x ir = x 2 + (y i − y 2 ).C r 89
  2. Kü thuËt §å ho¹ m¸y tÝnh 3. KÎ ®o¹n th¼ng (x li ,y i ) , (x ir ,y i ) b»ng mµu t« Chó ý 1. Khi h×nh thang c¬ b¶n biÕn d¹ng vÒ tam gi¸c ch¼ng h¹n x1=x2, y1=y2 (x4y4) (x3y3) (x1y1) khi ®ã: x li = x li−1 + C l x ir = x ir−1 + C r 2. T« mµu ®a gi¸c Dùa vµo kÕt qu¶ cña viÖc ph©n chia ®a gi¸c thµnh tæng c¸c h×nh thang c¬ b¶n ta suy ra ®Ó t« mµu mét ®a gi¸c bÊt kú, ta cÇn ph©n chia ®a gi¸c thµnh tæng c¸c h×nh thang c¬ b¶n vµ sau ®ã t« mµu c¸c h×nh thang ®· ®−îc chia 3. T« mµu mét vïng kÝn bÊt kú Cho mét tËp c¸c pixel tËp ®−îc gäi lµ liªn th«ng nÕu tõ mét pixel ta cã thÓ di chuyÓn ®Õn c¸c pixel bÊt kú thuéc tËp Cho mét tËp W c¸c ®iÓm ¶nh (Pixel) tËp W gäi lµ liªn th«ng cÊp 8 nÕu mçi pixel cã 8 ®iÓm l©n cËn thuéc tËp Cho mét tËp W c¸c ®iÓm ¶nh (pixel) tËp ®−îc gäi lµ liªn th«ng cÊp 4 nÕu mçi ®iÓm ¶nh thuéc tËp cã 4 ®iÓm l©n cËn thuéc tËp 90
  3. Kü thuËt §å ho¹ m¸y tÝnh Bµi to¸n t« mµu vïng bÊt kú Cho mét tËp W c¸c ®iÓm ¶nh liªn th«ng cÊp 4 ®−îc giíi h¹n bëi ®−êng biªn cã mÇu cb vµ mét ®iÓm ¶nh trong W h·y t« vïng W b»ng mµu Ct ý t−ëng cña thuËt to¸n ®¬n gi¶n nh− sau: XuÊt ph¸t tõ ®iÓm trong P cña vïng W kiÓm tra 4 ®iÓm l©n cËn cña P lµ P1,P2,P3,P4 nÕu ®iÓm Pi ( i = 1,4 ) kh«ng cã mÇu Cb th× t« Pi b»ng Ct vµ l¹i coi Pi lµ ®iÓm trong P cña W, qu¸ tr×nh ®−îc lÆp l¹i cho ®Õn khi gÆp mµu biªn Cb. ThuËt to¸n ng¾n gän trªn cã thÓ ®−îc gäi lµ thuËt to¸n vÕt dÇu loang. ThuËt to¸n ng¾n gän trªn cã thÓ m« t¶ b»ng thñ tôc ®Ö quy sau : Procedure Tomau(x,y,Cb,Ct: Integer); Begin If Color(x,y) Cb and Color(x,y)Ct Then Begin Putpixel (x,y,Ct); Tomau(x,y-1,Cb,Ct); Tomau(x,y+1,Cb,Ct); Tomau(x-1,y,Cb,Ct); Tomau(x+1,y,Cb,Ct); End; End; Chó ý : ThuËt to¸n trªn cã −u ®iÓm lµ ch−¬ng tr×nh ng¾n gän song do thñ tôc ®Ö quy nªn yªu cÇu bé nhí rÊt lín, nÕu miÒn W cã n ®iÓm ¶nh th× bé nhí cÇn n4 . V× vËy nÕu vïng W qu¸ lín sÏ dÉn ®Õn trµn bé nhí. §Ó kh¾c phôc nh−îc ®iÓm nµy ta cã thÓ c¶i tiÕn thuËt to¸n nh− sau: 1. X¸c ®Þnh Ymin, Ymax, Xmin, Xmax chøa vïng W 2. Tõ ®iÓm trong P di chuyÓn theo OX ®Ó t« c¸c ®iÓm cã cïng to¹ ®é Y. Sau ®ã l¹i dÞch chuyÓn theo OY Ch−¬ng tr×nh minh ho¹ : Y P X O 91
  4. Kü thuËt §å ho¹ m¸y tÝnh Program Flood_Fill; Uses Crt,Graph; Var Gd,Gm : Integer; Procedure To_Mau(a,b,mv,mt : Integer); (*------------------------------------*) Procedure Tm(x,y,mv,mt,u : Integer); Var a1,a2,b,t,k,t1,t2 : Integer; Procedure Tim(a1,a2,b,mv,u : Integer;Var x : Integer); Var i : Integer; Begin x:=0; While GetPixel(a1,b+u)=mv Do Inc(a1); While GetPixel(a2,b+u)=mv Do Dec(a2); For i:=a1 To a2 Do Begin If (GetPixel(i,b+u)=mv) Then Begin x:=i;Break;End; End; End; Procedure Tim1(a1,a2,b,mv,u : Integer;Var x : Integer); Var i : Integer; Begin x:=0; For i:=a1 To a2 Do Begin If (GetPixel(i,b+u)mv) Then Begin x:=i;Break;End; End; End; Begin SetColor(mt); b:=y; Repeat a1:=x;a2:=x;t:=0;k:=0;t1:=0;t2:=0; While GetPixel(a1-1,b)mv Do Begin If GetPixel(a1,b+u)mv Then t:=a1; Dec(a1); End; While GetPixel(a2+1,b)mv Do Begin 92
  5. Kü thuËt §å ho¹ m¸y tÝnh If GetPixel(a2,b+u)mv Then t:=a2; Inc(a2); End; Line(a1,b,a2,b); Tim(a1,a2,b,mv,1,k); If k0 Then Begin Tim1(k,a2,b,mv,1,t1); If (t10)And(GetPixel(t1,b+1)mt) Then Tm(t1,b+1,mv,mt,1); Tim1(a1,k,b,mv,1,t2); If (t20)And(GetPixel(t2,b+1)mt) Then Tm(t2,b+1,mv,mt,1); End; k:=0;t1:=0;t2:=0; Tim(a1,a2,b,mv,-1,k); If k0 Then Begin Tim1(a1,a2,b,mv,1,t1); If (t10)And(GetPixel(t1,b+1)mt) Then Tm(t1,b+1,mv,mt,1); t1:=0; Tim1(k,a2,b,mv,-1,t1); If (t10)And(GetPixel(t1,b-1)mt) Then Tm(t1,b-1,mv,mt,-1); Tim1(a1,k,b,mv,-1,t2); If (t20)And(GetPixel(t2,b-1)mt) Then Tm(t2,b-1,mv,mt,-1); End; b:=b+u; If t0 Then x:=t; Until T=0; End; (*------------------------------------*) Begin Tm(a,b,mv,mt,1); Tm(a,b,mv,mt,-1); End; (*------------------------------------*) Begin Gd:=0; Initgraph(Gd,Gm,'C:\Tp\Bgi'); RanDomize; Line(50,50,600,400); Line(600,400,350,100); Line(350,100,550,250); Line(550,250,550,200); Line(600,300,550,200); Line(600,300,600,50); Line(500,150,600,50); 93
  6. Kü thuËt §å ho¹ m¸y tÝnh Line(500,150,450,30); Line(400,80,450,30); Line(50,50,400,80); Repeat To_Mau(250,70,White,RanDom(14)+1); settextjustify(1,1); settextstyle(1,0,2); Outtextxy(320,400,'Press ESCAPE to Exit'); Repeat Until KeyPressed; Until (KeyPressed)And(ReadKey=#27); CloseGraph; End. $17. Xö lý ký tù trªn mμn h×nh §Ó biÓu diÔn c¸c ký tù trªn mµn h×nh ng−êi ta sö dông 2 byte cho 1 ký tù mét byte - m· (code) cña ký tù mét byte - thuéc tÝnh (attribute) cña ký tù. M· cña ký tù lµ mét sè trong tËp tõ 0-256 Byte thuéc tÝnh dïng ®Ó x¸c ®Þnh tÝnh chÊt hiÓn thÞ cña ký tù trªn mµn h×nh nh− mµu s¾c, chÕ ®é hiÖn nhÊp nh¸y (Blink)..... Mçi ký tù cã khu«n mÉu cña nã ng−êi ta gäi lµ shape hay pattern cña ký tù. Khu«n mÉu cña ký tù ®−îc l−u trong m¸y b»ng mét sè byte nµo ®ã tuú thuéc vµo khu«n mÉu cña ký tù. Trong m¸y tÝnh ng−êi ta dµnh 32 byte ®Ó l−u gi÷ khu«n mÉu cho mäi ký tù. Ng−êi ta t¹o c¸c byte biÓu diÔn khu«n mÉu cña mét ký tù theo nguyªn t¾c sau: ë chÕ ®é hép ký tù 8x8: ë chÕ ®é hép ký tù 8x14 94
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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