Составная кривая Безье 3-ей степени на Builder C++


Задание:
Построить составную кривую Безье 3-ей степени по 10 опорным точкам. Осуществить подбор точек полигона для выполнения условия стыковки по 1-ой производной.

Программа реализована на С++ (среда 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::Button4Click(TObject *Sender)
{
int h,rx1,ry1,rx2,ry2,tempx1,tempy1,tempx2,tempy2,tx3,ty3;
double t;
h=StrToInt(Edit1->Text);
t=0;
i=0;
Image1->Canvas->Pen->Color=clBlue;
Image1->Canvas->Pen->Width=3;
tempx1=(mas[1][0]+mas[9][0])*0.5;
tempy1=(mas[1][1]+mas[9][1])*0.5;
tx3=(mas[0][0]+mas[2][0])*0.5;
ty3=(mas[0][1]+mas[2][1])*0.5;
tempx2=(mas[i+2][0]+mas[i+4][0])*0.5;
tempy2=(mas[i+2][1]+mas[i+4][1])*0.5;
for(j=0;jCanvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}

i=3;t=0;
tempx1=tempx2;
tempy1=tempy2;
tempx2=(mas[i+2][0]+mas[i+4][0])*0.5;
tempy2=(mas[i+2][1]+mas[i+4][1])*0.5;
for(j=0;jCanvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}

i=6;t=0;
tempx1=tempx2;
tempy1=tempy2;
tempx2=(mas[i+2][0]+mas[0][0])*0.5;
tempy2=(mas[i+2][1]+mas[0][1])*0.5;
for(j=0;jCanvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}

t=0;
tempx1=tempx2;
tempy1=tempy2;
tempx2=(mas[1][0]+mas[9][0])*0.5;
tempy2=(mas[1][1]+mas[9][1])*0.5;
for(j=0;jCanvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}
}


Комментарии запрещены.




Статистика