Открытый В-сплайн 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;i {
k=ii+1;n[0]= ((ti[k+4]-t)*(ti[k+4]-t)*(ti[k+4]-t))/((ti[k+4]-ti[k+1])*(ti[k+4]-ti[k+2])*(ti[k+4]-ti[k+3]));
k=ii+2;n[1]= ((t-ti[k])*(ti[k+3]-t)*(ti[k+3]-t))/((ti[k+3]-ti[k])*(ti[k+3]-ti[k+1])*(ti[k+3]-ti[k+2])) + (ti[k+4]-t)/(ti[k+4]-ti[k+1])* (((t-ti[k+1])*(ti[k+3]-t))/((ti[k+3]-ti[k+1])*(ti[k+3]-ti[k+2])) + ((ti[k+4]-t)*(t-ti[k+2]))/((ti[k+4]-ti[k+2])*(ti[k+3]-ti[k+2])));
k=ii+3;n[2]= ((t-ti[k])/(ti[k+3]-ti[k]))* ( (t-ti[k])*(ti[k+2]-t)/((ti[k+2]-ti[k])*(ti[k+2]-ti[k+1])) + ((ti[k+3]-t)*(t-ti[k+1]))/((ti[k+3]-ti[k+1])*(ti[k+2]-ti[k+1]))) + ((ti[k+4]-t)*(t-ti[k+1])*(t-ti[k+1]))/((ti[k+4]-ti[k+1])*(ti[k+3]-ti[k+1])*(ti[k+2]-ti[k+1]));
k=ii+4;n[3]= ((t-ti[k])*(t-ti[k])*(t-ti[k]))/((ti[k+3]-ti[k])*(ti[k+2]-ti[k])*(ti[k+1]-ti[k]));
j=ii;
rx1= n[0]*mas[j][0]+n[1]*mas[j+1][0]+n[2]*mas[j+2][0]+n[3]*mas[j+3][0];
ry1= n[0]*mas[j][1]+n[1]*mas[j+1][1]+n[2]*mas[j+2][1]+n[3]*mas[j+3][1];
t+=(ti[ii+5]-ti[ii+4])/num;
k=ii+1;n[0]= ((ti[k+4]-t)*(ti[k+4]-t)*(ti[k+4]-t))/((ti[k+4]-ti[k+1])*(ti[k+4]-ti[k+2])*(ti[k+4]-ti[k+3]));
k=ii+2;n[1]= ((t-ti[k])*(ti[k+3]-t)*(ti[k+3]-t))/((ti[k+3]-ti[k])*(ti[k+3]-ti[k+1])*(ti[k+3]-ti[k+2])) + (ti[k+4]-t)/(ti[k+4]-ti[k+1])* (((t-ti[k+1])*(ti[k+3]-t))/((ti[k+3]-ti[k+1])*(ti[k+3]-ti[k+2])) + ((ti[k+4]-t)*(t-ti[k+2]))/((ti[k+4]-ti[k+2])*(ti[k+3]-ti[k+2])));
k=ii+3;n[2]= ((t-ti[k])/(ti[k+3]-ti[k]))* ( (t-ti[k])*(ti[k+2]-t)/((ti[k+2]-ti[k])*(ti[k+2]-ti[k+1])) + ((ti[k+3]-t)*(t-ti[k+1]))/((ti[k+3]-ti[k+1])*(ti[k+2]-ti[k+1]))) + ((ti[k+4]-t)*(t-ti[k+1])*(t-ti[k+1]))/((ti[k+4]-ti[k+1])*(ti[k+3]-ti[k+1])*(ti[k+2]-ti[k+1]));
k=ii+4;n[3]= ((t-ti[k])*(t-ti[k])*(t-ti[k]))/((ti[k+3]-ti[k])*(ti[k+2]-ti[k])*(ti[k+1]-ti[k]));
rx2= n[0]*mas[j][0]+n[1]*mas[j+1][0]+n[2]*mas[j+2][0]+n[3]*mas[j+3][0];
ry2= n[0]*mas[j][1]+n[1]*mas[j+1][1]+n[2]*mas[j+2][1]+n[3]*mas[j+3][1];
Image1->Canvas->MoveTo(rx1,ry1);
Image1->Canvas->LineTo(rx2,ry2);
}
}

Похожие записи
  1. Составная кривая Безье 3-ей степени на Builder C++
  2. Код Фримэна на Builder C++
  3. Построить цилиндр, как поверхность вращения в среде Builder C++
  4. Программа эмуляции работы КЭШ-памяти
  5. Событие OnMessage, перехватчики сообщений, перехваты Windows
  6. Механизм обработки сообщений в Delphi
  7. Рассылки сообщений, методы: Dispatch, Perform, Broadcast, NotifyControls, функции Windows API
  8. Обработка исключений при работе с базами данных
  9. Разработка приложения-клиент и приложения-сервер, взаимодействующие по OLE технологии в среде Delphi
  10. Многооператорные инструкции и атомарность
  11. Использование методов-сообщений для вызова корреспондирующих методов
  12. Среда исполнения общего языка CLR
  13. Структура объекта, RTTI, операторы Is и As, иерархия классов Delphi
  14. Преобразование pod в pdf, perl old documentation, text, latex, postscript, pdf
  15. Понятие события в Delphi – синтаксис, примеры
  16. C++: Памятка C++, конструкторы, копирование, присвоение, деструкторы
  17. Основы факторного планирования эксперимента

Оставить комментарий


Закажи работу СЕЙЧАС



Статистика

Рейтинг@Mail.ru