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 2 Các phép biến đổi hình trên hệ toạ độ - Bài 11

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

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

Mặt cong Bezier 1. Mặt cong Bezier Tình hình giống nh- với đ-ờng cong để có thể xây dựng mặt cong chính xác hơn khi cho tr-ớc một số điểm, ng-ời ta nghĩ đến việc xây dựng các mảnh mặt cong nhỏ hơn và sau đó ghép nối chúng lại, mặt cong Bezier là mặt cong có dạng tham số:

Chủ đề:
Lưu

Nội dung Text: Đồ họa máy tính - Chương 2 Các phép biến đổi hình trên hệ toạ độ - Bài 11

  1. Kü thuËt §å ho¹ m¸y tÝnh m Pi ( v) = ∑ Pij G j ( v) j= 0 ⇒ MÆt cong s cã thÓ viÕt d−íi d¹ng nm ∑ ∑ PijFi ( u)G j ( v) S( u, v) = ( 2) i = 0 j= 0 Víi Fi(u), Gj(v) lµ c¸c hµm c¬ së NÕu chän hµm c¬ së u − ui n ∏ n Fi ( u) = li ( u) = k = 0 u k − ui k ≠i v− vj m ∏ G j ( v) = l m ( v) = − vj j k =0 v k k≠ j khi ®ã nm ∑ ∑ Pij l m ( v)l in ( u) S( u, v) = (**) j i = 0 j= 0 Chóng ta thÓ thÊy mÆt cong s ®i qua ®iÓm Ui,vj S(ui,vj)=Pij C«ng thøc (**) gäi lµ c«ng thøc mÆt cong Lagrang MÆt cong Lagrang cã −u ®iÓm nã ®i qua nxm ®iÓm cho tr−íc vµ cã ®¹o hµm cao tuú ý. Do vËy nãi chung mÆt cong Lagrang cã sai sè rÊt lín so víi mÆt cong thùc ph¶i x©y dùng $11. MÆt cong Bezier 1. MÆt cong Bezier T×nh h×nh gièng nh− víi ®−êng cong ®Ó cã thÓ x©y dùng mÆt cong chÝnh x¸c h¬n khi cho tr−íc mét sè ®iÓm, ng−êi ta nghÜ ®Õn viÖc x©y dùng c¸c m¶nh mÆt cong nhá h¬n vµ sau ®ã ghÐp nèi chóng l¹i, mÆt cong Bezier lµ mÆt cong cã d¹ng tham sè: nm S( u, v) = ∑ ∑ Pij B m ( u) Bin ( v) (2) j i = 0 j= 0 ë ®©y Bm , Bi lµ c¸c ®a thøc Berstein bËc m vµ n, uo≤u≤u1 , vo≤v≤v1 j n 58
  2. Kü thuËt §å ho¹ m¸y tÝnh u=uo+q(u1-uo) v=vo+r(v1-vo) C¸c ®iÓm Pij ®−îc gäi lµ c¸c ®iÓm kiÓm tra cña mÆt cong Bezier. Cã thÓ minh ho¹ c¸c ®iÓm nµy s¾p xÕp theo trËt tù sau Suy tõ c¸ch x©y dùng ®−êng cong Bezier, chóng ta cã thÓ nhËn thÊy 4 ®iÓm Poo,Pom,Pno,Pnm lµ nh÷ng ®iÓm ch¾c ch¾n thuéc mÆt cong S. XÐt tr−êng hîp n=m=3 khi ®ã mèi liªn hÖ vÒ gi¸ trÞ vµ ®¹o hµm riªng ë c¸c nót Poo,Pom,Pno,Pnm ®−îc cho bëi c«ng thøc sau: ⎡ S( u 0 , v 0 ) S( u 0 , v 1 ) S 'v ( u 0 , v 0 ) S 'v ( u 0 , v1 ) ⎤ ⎢ ⎥ S( u 1 , v1 ) S 'v ( u1 , v 0 ) S 'v ( u1 , v 1 ) ⎥ S( u1 , v 0 ) ⎢ = ⎢S 'u ( u 0 , v 0 ) S 'u ( u 0 , v 1 ) S 'uv ( u 0 , v 0 ) S 'uv ( u 0 , v 1 ) ⎥ ⎢S ' ( u , v ) S ' (u , v ) S ' (u , v ) S ' (u , v ) ⎥ ⎣u 1 0 1⎦ u 1 1 uv 1 0 uv 1 −3 ⎡ ⎤ ⎢1 0 0⎥ ⎡1 0⎤ Δv 0 0 ⎡ P00 P01 P02 P03 ⎤ ⎢ ⎥ ⎢0 1⎥ ⎢ 3 P11 P12 P13 ⎥ ⎢0 0 0 0 0⎥ ⎢ −3 3 ⎥ P Δv ⎢ 10 ⎥⎢ ⎥ ⎢ 0⎥ 0 −3 ⎥ ⎥ ⎢ P20 P21 P22 P23 ⎥ ⎢0 0 ⎢ Δu Δu 0 −3 3 ⎥ ⎢ P ⎥⎢ Δv ⎥ ⎢0 ⎣ 30 P31 P32 P33 ⎦ ⎢ 0 3⎥ ⎢ Δu Δ u ⎥ ⎣ ⎦ ⎢0 0 ⎥ 1 ⎣ Δv ⎦ Δu=u1-u0; Δv=v1-v0; VÝ dô: Tõ mèi liªn hÖ trªn ta cã: S(u1,v1)=P33 3 Su(u1,v1)= (P33-P23) Δu 59
  3. Kü thuËt §å ho¹ m¸y tÝnh 3 Sv(u1,v1)= (P33-P32) Δv 9 Suv(u1,v1)= (P22-P32-P23+P33) ΔuΔv 2. D¸n c¸c mÆt cong Bezier Gi¶ sö chóng ta ®· x©y dùng ®−îc 2 mÆt cong Bezier S1(u,v) nµ S2(u,v) S1(u,v) ë ®©y cã miÒn x¸c ®Þnh [uo,u1]x[vo,v1] S2(u,v) cã miÒn x¸c ®Þnh [u1,u2]x[vo,v1] v1 S2 S1 vo u1 uo u2 Gi¶ sö ta cÇn ph¶i d¸n S1 vµ S2 däc theo biªn u=u1 khi ®ã: Víi hµm S1 ta ®Æt: u=uo+p(u1-uo) v=vo+r(v1-vo) n m ∑ ∑ Pi1, j Bin ( p) B m ( r ) ⇒ S1 ( u , v ) = j (*) i = 0 j= 0 Víi hµm S2 ta ®Æt u=u1+q(u2-u1) v=vo+r(r1-ro) nm ∑ ∑ Pi2, j Bin (q ) Bm ( r ) ⇒ S 2 ( u, v) = j (**) i= 0 j= 0 Chóng ta cã nhËn xÐt trªn biªn u=u1 c¸c ®iÓm kiÓm tra cña ®−êng cong Bezier t¹o nªn biªn u=u1 ®iÓm cuèi cña ®−êng Bezier theo v trªn S1 lµ ®iÓm ®Çu cña ®−êng cong Bezier trªn u2 1 2 ⇒ Pnj = P0 j ∀ j = 0, m (***) §iÒu kiÖn hai ®iÓm cho c¸c ®−êng Bezier theo v nèi víi nhau vµ liªn tôc trªn bê u. ViÖc nèi ®Ó b¶o ®¶m tÝnh tr¬n cña mÆt cong ®−a vÒ bµi to¸n nèi c¸c ®−êng cong Bezier Bezier theo tham sè v tr¬n ë c¸c ®iÓm 60
  4. Kü thuËt §å ho¹ m¸y tÝnh 1 2 ⇒ Pnj = P0 j = Pj j = 0, m . Ch−¬ng tr×nh minh häa : USES graph,crt; Const l=3; VAR pi:array[0..l] of real; u,v,t: real; xi,yi,zi,a,b,c:array[0..l,0..l] of real; x,y,z:array[0..100] of real; xdau,Gd,Gm,i,j,k,p:integer; a1,b1,s:real; st1,st2: string[1]; (*************************************************) {-------------Ve he truc toa do------------} procedure khoitao; begin Gd := Detect; InitGraph(Gd, Gm, ' '); if GraphResult grOk then Halt(1); directvideo:=False; setbkcolor(1); setcolor(14); setviewport(getmaxX div 2,getmaxY div 2,getmaxX,getmaxY,false); setlinestyle(0,0,0); line(0,0,320,0); line(-0,0,0,-240); line(0,0,-240,240); line(-5,-230,0,-240); line(5,-230,0,-240); line(310,-5,320,0); line(310,5,320,0); line(228,-235,240,-240); line(235,-228,240,-240); setlinestyle(1,0,0); line(-320,0,0,0); line(0,0,240,-240); line(0,0,0,240); settextjustify(0,2); outtextxy(5,5,'O'); outtextxy(305,10,'x'); outtextxy(10,-230,'y'); outtextxy(240,-230,'z'); setlinestyle(0,0,0); end; 61
  5. Kü thuËt §å ho¹ m¸y tÝnh (*************************************************) procedure move_to(x,y,z: integer); Begin moveto(round(x+z/sqrt(2)),round(y+z/sqrt(2))); End; (*************************************************) procedure line_to(x,y,z: integer); Begin lineto(round(x+z/sqrt(2)),round(y+z/sqrt(2))); End; (*************************************************) procedure put_pixel(x,y,z,m : integer); Begin putpixel(round(x+z/sqrt(2)),round(y+z/sqrt(2)),m); End; (*************************************************) {thu tuc ve duong cong theo thuat toan CASTELEJ} PROCEDURE ve; Var i,j : integer; BEGIN for i:=0 to l do Begin xi[i,0]:=x[i]; yi[i,0]:=y[i]; zi[i,0]:=z[i]; End; u:=0; while u
  6. Kü thuËt §å ho¹ m¸y tÝnh BEGIN a[0,0]:=-210; b[0,0]:=100; c[0,0]:=10; a[0,1]:=-200; b[0,1]:=-100;c[0,1]:=-30; a[0,2]:=-40; b[0,2]:=80; c[0,2]:=50; a[0,3]:=160; b[0,3]:=40;c[0,3]:=20; For i:=1 To l Do Begin For j:=0 To l Do Begin a[i,j]:=a[0,0]+i*10; b[i,j]:=b[0,0]+i*10; c[i,j]:=c[0,0]+i*10; End; End; a[3,3]:=a[0,3]-50; b[3,3]:=b[0,3]+140;c[3,3]:=c[0,3]-20; khoitao; i:=0; j:=0; circle(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2)),2); str(i:1,st1); str(j:1,st2); outtextxy(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2))+15,'A['+st1+','+st2+' ]'); i:=0; j:=l; circle(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2)),2); str(i:1,st1); str(j:1,st2); outtextxy(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2))+15,'A['+st1+','+st2+' ]'); i:=l; j:=0; circle(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2)),2); str(i:1,st1); str(j:1,st2); outtextxy(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2))+15,'A['+st1+','+st2+' ]'); i:=l; j:=l; circle(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2)),2); str(i:1,st1); str(j:1,st2); outtextxy(round(a[i,j]+c[i,j]/sqrt(2)),round(b[i,j]+c[i,j]/sqrt(2))+15,'A['+st1+','+st2+' ]'); v:=0; while v
  7. Kü thuËt §å ho¹ m¸y tÝnh xi[p,0]:=a[p,k]; yi[p,0]:=b[p,k];zi[p,0]:=c[p,k]; End; for j:=1 to l do Begin for i:=j to l do Begin xi[i,j]:=(1-v)*xi[i-1,j-1]+v*xi[i,j-1]; yi[i,j]:=(1-v)*yi[i-1,j-1]+v*yi[i,j-1]; zi[i,j]:=(1-v)*zi[i-1,j-1]+v*zi[i,j-1]; End; End; x[k]:=xi[i,j]; y[k]:=yi[i,j]; z[k]:=zi[i,j]; End; ve; v:=v+0.01 End; repeat until keypressed; closegraph; END. 64
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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