1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ 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 ppsx

7 394 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 260,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 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

Trang 1

P vi P G vij j

j

m

=

0

⇒ Mặt cong s có thể viết dưới dạng

S u v P F u G vij i j

j

m i

n

=

0 0 Với Fi(u), Gj(v) là các hàm cơ sở

Nếu chọn hàm cơ sở

k i k

k i

n

ư

=

0

j j

k j k

k j

m

ư

=

0

khi đó

S u v P lij jm v li u

n j

m i

n

=

0 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ố:

S u v P Bij mj u B vni

j

m

i

n

=

= ∑

0 0

ở đây Bmj ,Bin là các đa thức Berstein bậc m và n, uo≤u≤u1 , vo≤v≤v1

Trang 2

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:

=

ư

ư

ư

ư

Δ Δ Δ Δ

v

v

v

v Δu=u1-u0; Δv=v1-v0;

Ví dụ: Từ mối liên hệ trên ta có:

S(u1,v1)=P33 Su(u1,v1)= Δu3 (P33-P23)

Trang 3

Sv(u1,v1)= Δv3 (P33-P32) Suv(u1,v1)= Δ Δ u v9 (P22-P32-P23+P33)

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]

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)

=

= ∑

S u v P Bi j ni p Bmj r

j

m

i

n

1

1

0 0

Với hàm S2 ta đặt

u=u1+q(u2-u1) v=vo+r(r1-ro)

=

= ∑

S u v P B q Bi j ni mj r

j

m

i

n

2

2

0 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

⇒ Pnj1 = P02j ∀ =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

v

o

v

1

S2 S1

u

2

u1

uo

Trang 4

⇒ Pnj1 = P02j=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;

Trang 5

(*************************************************)

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<=1.01 do

Begin

for j:=1 to l do

Begin

for i:=j to l do

Begin

xi[i,j]:=(1-u)*xi[i-1,j-1]+u*xi[i,j-1];

yi[i,j]:=(1-u)*yi[i-1,j-1]+u*yi[i,j-1];

zi[i,j]:=(1-u)*zi[i-1,j-1]+u*zi[i,j-1];

End;

End;

put_pixel(round(xi[i,j]),round(yi[i,j]),round(zi[i,j]),WHITE);

End;

END;

(*************************************************)

{ -Chuong Trinh Chinh -}

Trang 6

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<=1.01 do

Begin

For k:=0 To l Do

Begin

For p:=0 To l Do

Begin

Trang 7

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

Ngày đăng: 24/07/2014, 10:21

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm