Открытый В-сплайн 3-ей степени на Builder C++
Задание: Построить открытый В-сплайн 3-ей степени при неравномерной параметризации (по длине хорды), n=9.
Данная задание реализовано на языке С++ в среде Builder
int mas[10][2],i,j;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Cells[0][0]=»X»;
StringGrid1->Cells[0][1]=»Y»;
//—————-задаем координаты Х—————
mas[0][0]=70;
mas[1][0]=20;
mas[2][0]=80;
mas[3][0]=200;
mas[4][0]=350;
mas[5][0]=430;
mas[6][0]=440;
mas[7][0]=390;
mas[8][0]=290;
mas[9][0]=180;
for(i=0;i<10;i++) StringGrid1->Cells[i+1][0]=IntToStr(mas[i][0]);
//—————-задаем координаты У—————
mas[0][1]=350;
mas[1][1]=170;
mas[2][1]=70;
mas[3][1]=30;
mas[4][1]=40;
mas[5][1]=90;
mas[6][1]=160;
mas[7][1]=340;
mas[8][1]=450;
mas[9][1]=430;
for(i=0;i<10;i++) StringGrid1->Cells[i+1][1]=IntToStr(mas[i][1]);
Button2Click(Form1);
}
//—————-Строим исходную фигуру——————————void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Canvas->Pen->Width=3;
Image1->Canvas->Pen->Color=clRed;for(i=0;i<9;i++) { Image1->Canvas->MoveTo(mas[i][0],mas[i][1]);
Image1->Canvas->LineTo(mas[i+1][0],mas[i+1][1]);
}
Image1->Canvas->MoveTo(mas[9][0],mas[9][1]);
Image1->Canvas->LineTo(mas[0][0],mas[0][1]);
}
//——————Очистить экран————————————
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Image1->Canvas->Pen->Color=clWhite;
Image1->Canvas->Pen->Width=3;
for(i=0;iWidth;i++)
{
Image1->Canvas->MoveTo(i,0);
Image1->Canvas->LineTo(i+1,Image1->Height);
}
}//————————Закрыть окно———————————
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form1->Close();
}//—————Открытый В-сплайн при неравномерной параметризации———————
void __fastcall TForm1::Button5Click(TObject *Sender)
{
double c[10],sumc=0,ti[15],temp=0,r;
Image1->Canvas->Pen->Color=clLime;
Image1->Canvas->Pen->Width=3;
for (i=1; i<10;i++) { c[i]=sqrt((mas[i][0]-mas[i-1][0])*(mas[i][0]-mas[i-1][0]) + (mas[i][1]-mas[i-1][1])*(mas[i][1]-mas[i-1][1])); sumc+=c[i]; } for(i=1;i<=4;i++) ti[i]=0; for(i=11;i<=14;i++) ti[i]=1; for(i=1;i<=6;i++) { temp=0; for(j=1;j<=i;j++) temp+=c[j]; ti[i+4]=(i/7*c[i+1]+temp)/sumc; } double n[16],t=0; int rx1,ry1,rx2,ry2; int num=StrToInt(Edit2->Text);
//————0<=t<=t5------------ int k=3, ii=0; for(ii=0;ii<7;ii++) for(i=0;iCanvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}
}