P. 1
Giao Trinh Ly Thuyet Do Hoa

Giao Trinh Ly Thuyet Do Hoa

|Views: 6|Likes:
Published by Metal28032013
Một cuốn giáo trình nhập môn cho những bạn học về đồ họa máy tính!
Một cuốn giáo trình nhập môn cho những bạn học về đồ họa máy tính!

More info:

Published by: Metal28032013 on May 02, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/02/2013

pdf

text

original

ðể tạo ra một ñường cong Bezier từ một dãy các ñiểm kiểm soát ta sẽ áp dụng

phương pháp lấy mẫu hàm p(t) ở các giá trị cách ñều nhau của tham số t, ví dụ có thể

lấy ti = i/N, i=0,1,...,N. Khi ñó ta sẽ ñược các ñiểm P(ti) từ công thức Bezier.

Nối các ñiểm này bằng các ñoạn thẳng ta sẽ ñược ñường cong Bezier gần ñúng. ðể

tính P(ti) ta có thể áp dụng ma trận của P(t) ở trên trong ñó chỉ có thành phần PowL

(ti)

là thay ñổi, còn tích BezL

.PT

với P = (P0 ,P1 , ...,PL ) là không thay ñổi.

Sau ñây là thủ tục minh họa việc vẽ ñường cong Bezier trong mặt phẳng:

Type Mang = array[0..50] of PointType;

function tich(x,y:word):real;

var s:real;i:word;

begin

if y<=1 then tich:=1

else begin

s:=1;

for i:=x to y do s:=s*i;

tich:=s;

end;

end;

function CLK(l,k:word):real;

begin

CLk:=tich(k+1,l)/tich(1,l-k);

end;

function Xmu(x:real;mu:word):real;

Chương VI. Thiết kế ñường cong và mt cong Bezier và B-Spline

73

var i:word;s:real;

begin

if mu=0 then s:=1

else begin

s:=1;

for i:=1 to mu do s:=s*x;

end;

Xmu:=s;

end;

function BKL(t:real;l,k:word):real;

begin

BKL:=CLK(l,k)*xmu(1-t,l-k)*xmu(t,k);

end;

procedure Pt(t:real;L:word;A:Mang;var diem:PointType);

var k:word;s,x,y:real;

begin

x:=0; y:=0;

for k:=0 to L do

begin

s:=BKL(t,l,k);

x:=x+A[k].x*s;

y:=y+A[k].y*s;

end;

diem.x:=round(x);

diem.y:=round(y);

end;

procedure Vebezier(A:Mang;L:integer);

var i,SoDiem:word; Diem:PointType;

dx,x:real;

begin

sodiem:=100;

dx:=1/sodiem;

Chương VI. Thiết kế ñường cong và mt cong Bezier và B-Spline

74

x:=0;

if L>0 then

begin

for i:=1 to sodiem+1 do

begin

Pt(x,L,A,Diem);

if i=1 then moveto(round(diem.x),round(diem.y))

else lineto(round(diem.x),round(diem.y));

x:=x+dx;

end;

end

end;

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->