Re: Безье

From
Andrew Vlasov ()
To
Sergey Andrianov ()
Date
2003-01-22T16:19:23Z
Area
RU.ALGORITHMS
From: "Andrew Vlasov" <vlas@dicomp.ru>

Это просто, вот мой код:

//=========
template<class X,class K> inline
 void PolynomialFitPK(X xf,X xl,K kf,K kl)
{
 _PolynomialFitPK(xf,xl,kf,kl,std::_Val_type(xf));
}

template<class X,class K,class T> inline
 void _PolynomialFitPK(X xf,X xl,K kf,K kl,T *)
{
 //f(t)=sum(k[i]*t^i,i=0,i<=n;i++),t=(0,1)
 //x[i]=f(i/N);i=0,N

 int iXCount=std::distance(xf,xl);
 int iYCount=std::distance(kf,kl);
 ASSERT(iXCount==iYCount);

 X x=xf;
 K k=kf;

 switch(iXCount)
 {
  case 3:
   k[0]= x[0];
   k[1]= x[0]*(-3) + x[1]*4    + x[2]*(-1);
   k[2]= x[0]*2    + x[1]*(-4) + x[2]*2;
   break;
  default:
   ASSERT(FALSE);
   break;
 }
}

//использвание:
main()
{
    Point x[3]={Point(x1,y1),Point(x2,y2), Point(x3,y3)}; //твои три точки,
с координатами (x1,y1), (x2,y2), (x3,y3)
    Point k[3]; //коэффициенты полинома3
    PolynomialFitPK(x,x+3,k,k+3);
}

"Sergey Andrianov" <Sergey.Andrianov@p400.f1507.n5020.z2.fidonet.org> wrote
in message news:1043015137@p400.f1507.n5020.z2.ftn...
> Здравствуй, Mike!
>
> Однажды 17-Jan-03  в 13:23   Mike 'l0ck' Kolesoff (2:5015/10.9)
> написал       All    по поводу
> -=-   Безье  -=-
>
> M'K> Имеется три точки, с координатами (x1,y1), (x2,y2), (x3,y3)
> M'K> соответственно.
> M'K> Хочется нарисовать кривую, от точки 1 до точки 3, чтобы она проходила
> M'K> через
> M'K> точку 2. Kрасивую кривую. Kак??
>
> Kак известно, через 3 точки можно провести окружность. Kрасивее кривой не
> бывает. А сабж имеет гораздо больше степеней свободы и вряд ли сможет
> сравниться с окружностью по красоте.
>
>                   До свидания,  в  22:24 MSK
>                                  Sergey
>


--- ifmail v.2.15dev5
 * Origin: Comcor (2:5020/400)