Графическое
представление результатов: в пространстве
В плоскости XY с наложением начальной сетки:
![]() |
Тот же тест, но параметр c=100:
![]() |
В качестве 2-го теста была взята 1/8 часть сферы.
Ниже представлены виды начальной модели и развертки в пространстве и на плоскости.
Выводы.
Видно, что в случае первой модели местоположение узлов левого нижнего угла почти не изменилось, в отличие от предыдущего случая, что и ожидалось, так как при меньшем коэффициенте С – коэффициенте отталкивания и силы натяжения эти узлы будут меньше подталкиваться узлами правого верхнего угла, имеющими большее равновесное расстояние.
Также видно, что в целом деформация сетки носит значительно менее глубокий характер, что также объяснимо – энергия сдвига значительно увеличила свой вклад и узел предпочитает больше «терпеть» некоторые увеличения энергий, связанные с отталкиванием и натяжением, нежели нести серьезные увеличения энергии сдвига, в результате сдвигов в сетке.
Можно сделать вывод, что развертки адекватны физическим представлениям ситуации.
Приложение 1.
Листинг программы.
static int sos[maxsize][4], num_s[maxsize], type_s[maxsize];
ofstream file3;
struct point
{
float x;
float y;
float z;
};
float f(float x, float y, float z, int i, point *list_p);
void main()
{
float z, func;
point *list_p;
int m;
clrscr();
//Считывание координат из файла
char *source;
ifstream inFile;
inFile.open("COORDS.DAT");
source="COORDS.DAT";
if (!inFile)
{
cerr << "\n Error. File "<< source <<" can't open.";
}
char next;
int end;
int i=0;
inFile>>end;
for (int j=0; j<=(end-1); j++)
{
if (next==EOF) break;
next = inFile.peek();
inFile>>list_p[j].x;
next = inFile.peek();
inFile>>list_p[j].y;
next = inFile.peek();
inFile>>list_p[j].z;
}
inFile.close();
//Считывание количества соседей из файла
ifstream inFile_2;
inFile_2.open("NUM_S.DAT");
source="NUM_S.DAT";
if (!inFile_2)
{
cerr << "\n Error. File "<< source <<" can't open.";
}
i=0;
for (j=0; j<=(end-1); j++)
{
if (next==EOF) break;
inFile_2>>num_s[j];
next = inFile_2.peek();
}
inFile_2.close();
//Считывание номеров соседей из файла
ifstream inFile_1;
inFile_1.open("SOSEDI.DAT");
source="SOSEDI.DAT";
if (!inFile_1)
{
cerr << "\n Error. File "<< source <<" can't open.";
}
i=0;
while (i<=(end-1))
{
if (next==EOF) break;
for (j=1; j<=num_s[i]; j++)
{
if (next==EOF) break;
inFile_1>>sos[i][j];
next = inFile_1.peek();
}
i++;
}
// Считывание параметров
ifstream inFile_3;
inFile_3.open("PARAMS.DAT");
source="PARAMS.DAT";
if (!inFile_3)
{
cerr << "\n Error. File "<< source <<" can't open.";
}
next = inFile_3.peek();
if (next==EOF)
{
cout<<"\n File PARAMS.DAT isn't write1";
exit(0);
}
inFile_3>>c;
next = inFile_3.peek();
if (next==EOF)
{
cout<<"\n File PARAMS.DAT isn't write2";
exit(0);
}
inFile_3>>k1;
next = inFile_3.peek();
if (next==EOF)
{
cout<<"\n File PARAMS.DAT isn't write3";
exit(0);
}
inFile_3>>m;
inFile_3.close();
//Подготовка файла с результатами к наполнению
ofstream file2;
file2.open("RESULTS.DAT");
if (!file2)
{
cerr << "\n Error. File "<< "results.dat" <<" can't open.";
}
file3.open("BETW.DAT");
if (!file3)
{
cerr << "\n Error. File "<< "betw.dat" <<" can't open.";
}
ifstream inFile_4;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.