Перейти к содержимому



Кривая Безье (delphi)

кривая Безье

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 admin

admin

    Администратор

  • Администраторы
  • 76 сообщений

Отправлено 21 Февраль 2011 - 16:04

type
	Coords = array[0..100] of Integer;

function Pow(x:real;n:integer):real;
var i:integer;
	m:real;
begin
	m:=1;
	for i:=1 to n do m:=m*x;
	for i:=-1 downto n do m:=m/x;
	Pow:=m;
end;

procedure DrawCurve(Canvas:TCanvas;XBas,YBas:Coords;Count:Integer;t_Step:Real);
var
	fact1,fact2,fact3:LongInt;
	SumX,SumY,coeff,Newton,Param:Real;
	i,j:Integer;
begin
fact2:=1;
for j:=1 to Count do
	fact2:=fact2*j;
Canvas.moveto(XBas[0],YBas[0]);
Param:=t_Step;
	while (Param<=1) do
	begin
		SumX:=0; SumY:=0;
		for i:=0 to Count do
		begin
			fact1:=1;
			fact3:=1;
			for j:=1 to i do
				fact1:=fact1*j;
			for j:=1 to Count-i do
				fact3:=fact3*j;
			Newton:=fact2/(fact1*fact3);
			coeff:=Newton*Pow(Param,i)*Pow((1-Param),(Count-i));
			SumX:=SumX+coeff*XBas[i];
			SumY:=SumY+coeff*YBas[i];
		end;
		Canvas.lineto(Round(SumX),Round(SumY));
	Param:=Param + t_Step;
	end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
	X,Y:Coords;
begin
X[0]:=10;Y[0]:=10;X[1]:=100;Y[1]:=100;X[2]:=100;Y[2]:=10;X[3]:=200;Y[3]:=100;
DrawCurve(Image1.Canvas,X,Y,3,0.003);
end; 






Темы с аналогичным тегами кривая, Безье

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей

Рейтинг@Mail.ru