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 1 Màn hình của máy tính - Bài 3

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

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

Các thuật toán vẽ đoạn thẳng, đ-ờng tròn I. Vẽ đoạn thẳng : Kỹ thuật Đồ hoạ máy tính Giả sử ta cần vẽ đoạn thẳng đi qua 2 điểm (x1, y1) và (x2, y2), thì hệ số góc của nó là m=dy/dx, trong đó dy=y2-y1; dx=x2-x1 và ph-ơng trình đ-ờng thẳng sẽ là y=m.x+b với b=y1-m.x1;

Chủ đề:
Lưu

Nội dung Text: Đồ họa máy tính - Chương 1 Màn hình của máy tính - Bài 3

  1. Kü thuËt §å ho¹ m¸y tÝnh intr($10,R); End; Procedure write_color_reg(index: Integer;color: RGB_COLOR_TYP); Begin port[COLOR_REG_WR]:=index; port[COLOR_DATA]:=color.red; port[COLOR_DATA]:=color.green; port[COLOR_DATA]:=color.blue; End; Var VIDEO_BUFFER : Word; gm,index,n: integer; color: RGB_COLOR_TYP; Begin clrscr; VIDEO_BUFFER:=$A000; gm:=$13; set_mode(gm); index:=0; n:=2; Repeat n:=n+b; color.red:=n; color.green:=0; color.blue:=n; write_color_reg(index,color); Delay(150); If n>60 Then b:=-1; If n
  2. Kü thuËt §å ho¹ m¸y tÝnh Gi¶ sö ta cÇn vÏ ®o¹n th¼ng ®i qua 2 ®iÓm (x1, y1) vµ (x2, y2), th× hÖ sè gãc cña nã lµ m=dy/dx, trong ®ã dy=y2-y1; dx=x2-x1 vµ ph−¬ng tr×nh ®−êng th¼ng sÏ lµ y=m.x+b víi b=y1-m.x1; 1. VÏ ®o¹n th¼ng b»ng c¸ch lµm trßn sè : a. Tr−êng hîp x1=x2 : trong tr−êng hîp nµy ®o¹n th¼ng lµ ®−êng song song víi trôc tung b. Tr−êng hîp y1=y2 : trong tr−êng hîp nµy ®o¹n th¼ng lµ ®−êng song song víi trôc hoµnh c. Trong tr−êng hîp 0
  3. Kü thuËt §å ho¹ m¸y tÝnh Kho¶ng c¸ch gi÷a y[i]+1 vµ y : d2=y[i]+1-y=y[i]+1-m(x[i]+1)-b HiÖu gi÷a hai kho¶ng c¸ch nµy lµ : d1-d2=2m(x[i]+1)-2y[i]+2b-1 thay m=dy/dx ta cã d1-d2=2(dy/dx)(x[i]+1)-2y[i]+2b-1 nªn p[i]=dx(d1-d2)=2dy.x[i]+2dy-2dx.y[i]+2dx.b-dx =2dy.x[i]-2dx.y[i]+2dy+dx(2b-1) (1) Hay p[i]=2dy.x[i]-2dx.y[i]+c víi c=2dy+dx(2b-1) thay i=1 ta cã p[1]=2dy.x1-2dy.y1+c=2dy-dx NÕu p[i]
  4. Kü thuËt §å ho¹ m¸y tÝnh x:=x1; y:=y1; While x
  5. Kü thuËt §å ho¹ m¸y tÝnh x[i+1]=x[i]-hy.[i] y[i+1]=h.x[i+1]+y[i] Víi gi¸ trÞ ban ®Çu lµ x0=R, y0=0 Vµ thñ tôc ®Ó vÏ ®−êng trßn theo ph−¬ng ph¸p nµy lµ : Procedure Circle_(x1,y1,r : Integer); Var mau : Byte; d: LongInt; x,y,h: Real; Begin mau:=GetColor; h:=1/r; d:=0; x:=r; y:=0; Repeat Putpixel(x1+Round(x),y1+Round(y),mau); x:=x-h*y; y:=h*x+y; Inc(d); Until d*h>2*pi; End; 2. ThuËt to¸n vÏ ®−êng trßn cña Bresenham ThuËt to¸n trªn vÏ ®−êng trßn vÉn cßn chËm v× ph¶i tÝnh to¸n liªn quan víi c¸c sè thùc. T−¬ng tù nh− víi ®−êng th¼ng, thuËt to¸n vÏ ®−êng trßn cña Bresanham chØ thùc hiÖn trªn c¸c sè nguyªn nªn ch¹y nhanh h¬n rÊt nhiÒu : 32
  6. Kü thuËt §å ho¹ m¸y tÝnh Còng nh− trªn ta xÐt t©m ë gèc to¹ ®é, víi chó ý r»ng cø mét ®iÓm thuéc ®−êng trßn th× b»ng c¸ch ®èi xøng qua c¸c trôc to¹ ®é, qua c¸c ®−êng chÐo ta cã thÓ x¸c ®Þnh ®−îc 8 ®iÓm thuéc ®−êng trßn (nh− h×nh vÏ). Do ®ã ta chØ cÇn xÐt 1/8 cung trßn b¾t ®Çu tõ x=0,y=R vµ kÕt thóc khi x=y. Ta viÕt l¹i ph−¬ng tr×nh ®−êng trßn thµnh y2=R2-x2 Gi¶ sö ®iÓm (x[i], y[i]) lµ ®iÓm thuéc ®−êng trßn, vÞ trÝ cña ®iÓm kÕ tiÕp cÇn vÏ sÏ lµ (x[i]+1,y[i]) hoÆc (x[i]+1,y[i]-1) vµ gi¸ trÞ ®óng cña y sÏ ®−îc xÐt b»ng ph−¬ng tr×nh y2=R2-(x[i+1])2 d1=(y[i])2-y2=(y[i])2-R2+(x[i]+1)2 Ta xÐt 2 ®é dµi : d2=y2-(y[i]-1)2=R2-(x[i]+1)2-(y[i]-1)2 Vµ Do ®ã hiÖu gi÷a d1 vµ d2 lµ : p[i]=d1-d2=2(x[i]+1)2+(y[i])2+(y[i]-1)2-2R2 Còng gièng nh− ®o¹n th¼ng nÕu p[i] ©m ta chän y[i], ng−îc l¹i chän y[i]-1 T¨ng i lªn 1 ®¬n vÞ ta cã p[i+1]=d1-d2=2(x[i+1]+1)2+(y[i+1])2+(y[i+1]-1)2-2R2 Nªn p[i+1]=p[i]+4x[i]+6+2((y[i+1])2-(y[i])2)-2(y[i+1]-y[i]) mµ y[i+1] hoÆc b»ng y[i] hoÆc b»ng y[i]-1 NÕu y[i+1]=y[i] th× p[i+1]=p[i]+4x[i]+6 NÕu y[i+1]=y[i]-1 th× p[i+1]=p[i]+4(x[i]-y[i])+10 Cã thÓ tãm t¾t c¸c b−íc nh− sau : 1. §Æt x:=0; y:=r; p:=3-2*r; 2. NÕu x>y kÕt thóc nÕu kh«ng thùc hiÖn b−íc 3 3. VÏ 8 ®iÓm (x, y); (-x, y); (x, -y); (-x, -y); (y, x); (-y, x); (y, -x); (-y, -x); 4. NÕu p
  7. Kü thuËt §å ho¹ m¸y tÝnh 6. Quay l¹i b−íc 2 Vµ thñ tôc ®Ó vÏ ®−êng trßn theo thuËt to¸n Bresenham lµ : Procedure Circle_(x1,y1,r : Integer); Var mau : Byte; x,y,p: Integer; Procedure Put_Pixels(x,y: Integer); Begin Putpixel(x1+x,y1+y,mau); Putpixel(x1-x,y1+y,mau); Putpixel(x1+x,y1-y,mau); Putpixel(x1-x,y1-y,mau); Putpixel(x1+y,y1+x,mau); Putpixel(x1-y,y1+x,mau); Putpixel(x1+y,y1-x,mau); Putpixel(x1-y,y1-x,mau); End; Begin mau:=GetColor; x:=0; y:=r; p:=3-2*r; While x
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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