Контрольная работа: Сглаженная поверхность для границы трех атомов в пространстве
{ int i,kol=0;
aj=x[2]-x[1];
bj=y[2]-y[1];
cj=z[2]-z[1];
ak=x[3]-x[1];
bk=y[3]-y[1];
ck=z[3]-z[1];
Ris=(r[1]+Rc)*(r[1]+Rc);
Rjs=(r[2]+Rc)*(r[2]+Rc);
Rks=(r[3]+Rc)*(r[3]+Rc);
dj=(0.5*(Ris-Rjs+(aj*aj)+(bj*bj)+(cj*cj)));
dk=(0.5*(Ris-Rks+(ak*ak)+(bk*bk)+(ck*ck)));
A=(aj*bk-ak*bj)*(aj*bk-ak*bj)+(bj*ck-bk*cj)*(bj*ck-bk*cj)+(cj*ak-ck*aj)*(cj*ak-ck*aj);
Bx=(dj*bk-dk*bj)*(aj*bk-ak*bj)+(dj*ck-dk*cj)*(aj*ck-ak*cj);
By=(dj*ck-dk*cj)*(bj*ck-bk*cj)+(dj*ak-dk*aj)*(bj*ak-bk*aj);
Bz=(dj*ak-dk*aj)*(cj*ak-ck*aj)+(dj*bk-dk*bj)*(cj*bk-ck*bj);
Cx=(dj*bk-dk*bj)*(dj*bk-dk*bj)+(dj*ck-dk*cj)*(dj*ck-dk*cj)-Ris*(bj*ck-bk*cj)*(bj*ck-bk*cj);
Cy=(dj*ck-dk*cj)*(dj*ck-dk*cj)+(dj*ak-dk*aj)*(dj*ak-dk*aj)-Ris*(cj*ak-ck*aj)*(cj*ak-ck*aj);
Cz=(dj*ak-dk*aj)*(dj*ak-dk*aj)+(dj*bk-dk*bj)*(dj*bk-dk*bj)-Ris*(aj*bk-ak*bj)*(aj*bk-ak*bj);
if ((Bx*Bx-A*Cx)<0) kol++;
if ((By*By-A*Cy)<0) kol++;
if ((Bz*Bz-A*Cz)<0) kol++;
if (kol!=0) {printf("SPHERA RADIUSA %d NE MOZHET ODNOVREMENNO KASATSJA 3 DANNIH SPHER",Rc);system("PAUSE");exit(1);}
Xc=double(x[1])+(Bx+sqrt((Bx*Bx-A*Cx)))/A;
double dg1,dg2,dg3;
double xc1,yc1,zc1,xc2,yc2,zc2,xc3,yc3,zc3,pc1,pc2,pc3;
int nom;
int j=1;
while (j<1500)