inFile_4.open("TYPE_S.DAT");
source="TYPE_S.DAT";
if (!inFile_4)
{
cerr << "\n Error. File "<< source <<" can't open.";
}
i=0;
for (j=0; j<=(end-1); j++)
{
if (next==EOF) break;
inFile_4>>type_s[j];
next = inFile_4.peek();
}
inFile_4.close();
//Расчет равновесного расстояния
float w1, w2, w3, ws;
i=0;
while (i<=(end-1))
{
for (j=1; j<=num_s[i]; j++)
{
w1=pow((list_p[i].x-list_p[sos[i][j]-1].x), 2);
w2=pow((list_p[i].y-list_p[sos[i][j]-1].y), 2);
w3=pow((list_p[i].z-list_p[sos[i][j]-1].z), 2);
ws=sqrt(w1+w2+w3);
w[i][j]=ws;
}
i++;
}
i=0;
float xf, yf, zf, xp, yp, zp, xm, ym, zm, min, min_l, max_en, max_w, min_p, ff;
int g, k, i_max, j_max, flag_s=0, i_n[maxsize], num_n=0, b, f_e=0, f_e3=0;
int f_e4;
//Обход всех точек с подсчетом энергии и выбором точки с максимальной энергией.
cout<<"\nProcessing";
while (!flag_s)
{
g=0;
f_e3=0;
cout<<".";
// Выбираем начальную точку максимума
// Учет ситуации, когда длина массива с номерами узлов, неулучшающих свою
// энергию = 0
if (num_n==0)
{
g=0;
f_e3=1;
}
// Иначе
while (!f_e3)
{
f_e4=0;
for (b=1; b<=num_n; b++)
{
if (g==i_n[b])
{
f_e4=1;
}
}
if (!f_e4)
{
f_e3=1;
}
else
{
f_e4=0;
g++;
}
}
max_en=f(list_p[g].x, list_p[g].y, 0, g, list_p);
file3<<"\n *********** new max_en="<<max_en<<" i="<<g;
// Выбор узла с максимальной энергией
i_max=g;
g=0;
for (b=1; b<=num_n; b++)
{
file3<<"\ni_n["<<b<<"]="<<i_n[b];
}
while (g<=(end-1))
{
file3<<"\ng="<<g<<"....f="<<f(list_p[g].x, list_p[g].y, 0, g, list_p);
file3<<" x="<<list_p[g].x<<" y="<<list_p[g].y<<" z="<<0;
g++;
}
//--------------------------------g=0;
while (g<=(end-1))
{
ff=f(list_p[g].x, list_p[g].y, 0, g, list_p);
if (max_en<ff)
{
for (b=1; b<=num_n; b++)
{
if (g==i_n[b])
{
f_e=1;
}
}
if (!f_e)
{
max_en=ff;
i_max=g;
}
f_e=0;
}
g++;
}
file3<<"\n -----------------max_en="<<max_en<<" i="<<i_max;
//Поиск амплитуды изменения по x и y.
i=i_max;
max_w=w[i][1];
g=2;
while (g<=num_s[i])
{
if (max_w<w[i][g])
{
max_w=w[i][g];
}
g++;
}
//Минимизация
int fg=0;
randomize();
min=max_en;
xf=list_p[i].x;
yf=list_p[i].y;
xm=xf;
ym=yf;
k=0;
while(k<m)
{
if ((rand()*0.000030518509475997)<=0.5)
{
xp=xf+(float)(rand()*0.000030518509475997*max_w);
}
else
{
xp=xf-(float)(rand()*0.000030518509475997*max_w);
}
if ((rand()*0.000030518509475997)<=0.5)
{
yp=yf+(float)(rand()*0.000030518509475997*max_w);
}
else
{
yp=yf-(float)(rand()*0.000030518509475997*max_w);
}
min_p=f(xp, yp, 0, i, list_p);
if (min_p<min)
{
min=min_p;
xm=xp;
ym=yp;
}
k++;
}
min_l=min;
while(!fg)
{
k=0;
while(k<m)
{
if ((rand()*0.000030518509475997)<=0.5)
{
xp=xf+(float)(rand()*0.000030518509475997*max_w);
}
else
{
xp=xf-(float)(rand()*0.000030518509475997*max_w);
}
if ((rand()*0.000030518509475997)<=0.5)
{
yp=yf+(float)(rand()*0.000030518509475997*max_w);
}
else
{
yp=yf-(float)(rand()*0.000030518509475997*max_w);
}
min_p=f(xp, yp, 0, i, list_p);
if (min_p<min)
{
min=min_p;
xm=xp;
ym=yp;
}
k++;
}
if (min_l>min)
{
min_l=min;
}
else
{
fg=1;
}
}
if ((max_en*0.999)<=min)
{
num_n++;
i_n[num_n]=i_max;
}
else
{
num_n=0;
list_p[i_max].x=xm;
list_p[i_max].y=ym;
}
if (num_n==end)
{
g=0;
while (g<=(end-1))
{
file2<<"\n"<<g<<") "<<list_p[g].x<<" "<<list_p[g].y<<" "<<0;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.