Скачиваний:
40
Добавлен:
01.05.2014
Размер:
1.57 Кб
Скачать
unit bezier;
interface
uses Math, Ap, Sysutils;

procedure BezierCurve(const N : Integer;
XA : TReal1DArray;
YA : TReal1DArray;
const T : Double;
var X : Double;
var Y : Double);

implementation

(*************************************************************************
Построение кривой Безье.

Параметры:
N - число точек массиве минус один
XA, YA - массивы абсцисс и ординат с номерами от 0 до N.
T - параметр, положение точки на кривой. От 0 до 1.

Результат:
X,Y - точка на кривой
*************************************************************************)
procedure BezierCurve(const N : Integer;
XA : TReal1DArray;
YA : TReal1DArray;
const T : Double;
var X : Double;
var Y : Double);
var
I : Integer;
C : Integer;
P : Double;
begin
XA := DynamicArrayCopy(XA);
YA := DynamicArrayCopy(YA);
C := 1;
I:=0;
while I<=N do
begin
XA[I] := XA[I]*C;
YA[I] := YA[I]*C;
C := (n-I)*C div (I+1);
Inc(I);
end;
P := 1;
I:=0;
while I<=N do
begin
XA[I] := XA[I]*P;
YA[I] := YA[I]*P;
P := P*T;
Inc(I);
end;
P := 1;
I:=N;
while I>=0 do
begin
XA[I] := XA[I]*P;
YA[I] := YA[I]*P;
P := P*(1-T);
Dec(I);
end;
X := 0;
Y := 0;
I:=0;
while I<=N do
begin
X := X+XA[I];
Y := Y+YA[I];
Inc(I);
end;
end;


end.