Смекни!
smekni.com

Сглаженная поверхность для границы трех атомов в пространстве (стр. 1 из 2)

Федеральное агентство по образованию РФ

ГОУ ВПО «Волгоградский государственный университет»

Факультет математики и информационных технологий

Кафедра ПМП

Семестровая работа на тему:

«Сглаженная поверхность для границы трёх атомов в пространстве»

Выполнил:

студент группы

ПМб-091

Орлов А.А.

Научный руководитель:

Чернышев И.В.

Волгоград 2011

Содержание

Введение

Постановка задачи

Метод (схема) решения поставленной задачи

Заключение


К задаче о построении сглаженной поверхности в пространстве сводится задача вычисления эффективных значений объема и поверхности молекул, при котором молекула моделируется областью с гладкой границей, представляющей из себя объеденение сферических фрагментов. Например для вычисления объема полости, занимаемой молекулой солюта в растворе, а также величины возникающей при этом поверхности раздела, что является необходимым звеном в построении количественных моделей взаимодействия растворенного вещества с растворителем.

Идея предлагаемого геометрического метода сглаживания формы молекулы состоит в том, что граница молекулы представляется в виде поверхности, у которой радиус кривизны вогнутых частей в любой точке не меньше некоторого заданого значения. Этим радиусом скругления может быть, например, эффективный радиус молекул некоторого химического соеденинения, учавствующего во взаимодействии с рассматриваемой молекулой.

В данной работе необходимо построить сглаженную поверхность для заданных 3-х атомов и радиусу большого атома.

Постановка задачи

Задача построения поверхности заключаетя в создании алгоритма с помощью которого, по заданым координатам и радиусам 3-х атомов, а также радиусу атома, касающегося их, можно построить сглаженную поверхность для границы данных атомов в пространстве.

Метод (схема) решения поставленной задачи

1. Программа считывает данные с файла shari.txt

Далее вычисляются координаты центра атома, который касается 3-х

2. остальных.

Координаты центра атома радиуса RS , касающегося трех атомов с центрами в точках Oi(xi,yi,zi), Oj(xj,yj,zj), Ok(xk,yk,zk) определяются следующими формулами:


где

Для сокращения записи использованы обозначения

3. Вычисляютя координаты точек касания большого атома с 3-мя остальными.

Для каждой точки касания необходимо выполнение 3-х условий:

A. Точка касания принадлежит большому атому.

Б. Точка касания принадлежит атому с которым касается большойй.

В. Точка касания принадлежит каноническому уравнению прямой, которое составленно по координатам центра большого атома и координатам центра атома, которого касается большой атом:

(Xkosn - Xc)2+ (Ykosn - Yc)2 + (Zkosn - Zc)2=Rc2

(Xkosn - Xn)2 + (Ykosn - Yn)2 + (Zkosn - Zn)2 =Rn2

Xkosn – XnYkosn - YnZkosn – Zn

Xc – Xn Yc – Yn Zc – Zn

Где N=1, 2, 3 соответственно.

Xc,Yc,Zc – координаты большого атома.

Xkosi,Ykosi,Zkosi,– координаты точки касания i-го атома и большого атома.

Решая данную ситему находим координаты точек касания.

4.Строются три уравнения плоскости, через координаты двух точек касания и координаты центра большого атома.Уравнения строются через определитель 3*3

X – X1 Y – Y1 Z – Z1

X2 – X1 Y2 – Y1 Z2 – Z1 = 0

Xc – X1 Yc – Y1 Zc – Z1

X – X1 Y – Y1 Z – Z1

X3 – X1 Y3 – Y1 Z3 – Z1 = 0

Xc – X1 Yc – Y1 Zc – Z1

X – X2 Y – Y2 Z – Z2

X3 – X2 Y3 – Y2 Z3 – Z2 = 0

Xc – X2 Yc – Y2Zc – Z2

Далее находим точки пересечения каждой плоскости с поверхностью большого атома.

(X - Xc)2+ (Y - Yc)2 + (Z - Zc)2=Rc2

При этом должно выполнятся условие:

Xkosi<= X <= XkosjЕсли Xkosi< Xkosj

Xkosj<= X <= XkosiЕсли Xkosj< Xkosi


Где (i=1,j=2) (i=1,j=3) (i=2,j=3)

5) В результате работы программа строит:

A) 3 атома по координатам считанным с файла shari.txt

Б) Атом с радиусом Rc считанным с клавиатуры, который касается 3-х остальных.

В) Сглаженную поверхность.

Г) Оси координат.

Д) Таблицу содержащую координаты точек касания большого атомоа с другими 3-мя атомами.

После поворота системы шаров на угол 900 вокруг оси

X=x[1]+x[2]+x[3]

Z=z[1]+z[2]+z[3]

Заключение

Задачей данной семестровой работы являлась построение алгоритма, с помощью которого строится сглаженная поверхность для границы трех атомов в пространстве.

Итогом работы можно считать приложение для ОС Windows, которое по заданным координатам и радиусам 3-х атомов, а также радиусу большого атома строит сглаженную поверхность.


Приложение

Текст программы имитации движения частиц в пористой среде для ОС Windows.

алгоритм сглаженная поверхность атом

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>

#include<math.h>

#define ESC 27

#define DOWN 80

#define UP 72

#define ENTER 13

int x[4],y[4],z[4],r[4],Rc,raz=0,kol_vr;

int skok=1,schit=0;

double aj,bj,cj,ak,bk,ck,Ris,Rjs,Rks,p[5],alp1,alp2,alp3,al1,al2,al3,al4,alp4;;

double Xc,Yc,Zc,dj,dk,sin_a,sin_b,Xvr,Zvr,R1,R2,R3,R4,ugol[1500],Rad[1500],XX[1500],YY[1500],ZZ[1500];

double Bx,By,Bz,Cx,Cy,Cz,A,sum[3];

double Xkos1,Ykos1,Zkos1,yc1,xc1,zc1,XYc1,ZYc1,M1,M2;

double Xkos2,Ykos2,Zkos2,yc2,xc2,zc2,XYc2,ZYc2,M3,M4;

double Xkos3,Ykos3,Zkos3,yc3,xc3,zc3,XYc3,ZYc3,M5,M6;

void dano(void)

{ FILE *f=fopen("shari.txt","r");

int i;

printf("KOORDINATI 3 SFER I IH RADIUSI&bsol;n");

for(i=1;i<=3;i++)

{

printf("X%d=",i);fscanf(f,"%d",&x[i]);printf("%d&bsol;n",x[i]);

printf("Y%d=",i);fscanf(f,"%d",&y[i]);printf("%d&bsol;n",y[i]);

printf("Z%d=",i);fscanf(f,"%d",&z[i]);p[i]=z[i];printf("%d&bsol;n",z[i]);

printf("R%d=",i);fscanf(f,"%d",&r[i]);printf("%d&bsol;n",r[i]);

}

Zvr=(z[1]+z[2]+z[3])/3;

Xvr=(x[1]+x[2]+x[3])/3;

R1=(sqrt((x[1]-Xvr)*(x[1]-Xvr)+(z[1]-Zvr)*(z[1]-Zvr)));

R2=(sqrt((x[2]-Xvr)*(x[2]-Xvr)+(z[2]-Zvr)*(z[2]-Zvr)));

R3=(sqrt((x[3]-Xvr)*(x[3]-Xvr)+(z[3]-Zvr)*(z[3]-Zvr)));

double x1,x2,y1,y2;

x1=x[1]-Xvr;x2=R1;y1=z[1]-Zvr;y2=0;

alp1=(x1*x2+y1*y2)/((sqrt(x1*x1+y1*y1)))/(sqrt(x2*x2+y2*y2));

al1=acos(alp1)*180/M_PI;

x1=x[2]-Xvr;x2=R2;y1=z[2]-Zvr;y2=0;

alp2=(x1*x2+y1*y2)/((sqrt(x1*x1+y1*y1)))/(sqrt(x2*x2+y2*y2));

al2=acos(alp2)*180/M_PI;

x1=x[3]-Xvr;x2=R3;y1=z[3]-Zvr;y2=0;

alp3=(x1*x2+y1*y2)/((sqrt(x1*x1+y1*y1)))/(sqrt(x2*x2+y2*y2));

al3=acos(alp3)*180/M_PI;

printf("vvedite radius bolshogo shara&bsol;n");

scanf("%d",&Rc);

initwindow (1024,860);

}

int stroim(void)

{ int i,k,j;double max;

max=p[1];

for(i=1;i<=4;i++)

{if (p[i]>=max) {max=p[i];k=i;}}

for(i=1;i<4;i++)

{

if (z[i]==max) {p[k]=-1;return i;}

}

p[4]=-1;

return 4;

}

void risuem(void)

{

setcolor(7);

setlinestyle(0,0,1);

char st1[5];

char st2[5];

char st3[5];

xc1=Xc-x[1];xc2=Xc-x[2];xc3=Xc-x[3];

yc1=Yc-y[1];yc2=Yc-y[2];yc3=Yc-y[3];

zc1=Zc-z[1];zc2=Zc-z[2];zc3=Zc-z[3];

XYc1=(-xc1*y[1]+yc1*x[1])/yc1;XYc2=(-xc2*y[2]+yc2*x[2])/yc2;XYc3=(-xc3*y[3]+yc3*x[3])/yc3;

ZYc1=(-zc1*y[1]+yc1*z[1])/yc1;ZYc2=(-zc2*y[2]+yc2*z[2])/yc2;ZYc3=(-zc3*y[3]+yc3*z[3])/yc3;

M1=((Rc*Rc)-(Xc*Xc+Yc*Yc+Zc*Zc))/(-2);

M2=((r[1]*r[1])-(x[1]*x[1]+y[1]*y[1]+z[1]*z[1]))/(-2);

M3=((r[2]*r[2])-(x[2]*x[2]+y[2]*y[2]+z[2]*z[2]))/(-2);

M4=((r[3]*r[3])-(x[3]*x[3]+y[3]*y[3]+z[3]*z[3]))/(-2);

Ykos1=(M1-M2-XYc1*Xc+XYc1*x[1]-ZYc1*Zc+ZYc1*z[1])/(xc1*Xc/yc1-xc1*x[1]/yc1+(Yc-y[1])+zc1*Zc/yc1-zc1*z[1]/yc1);

Ykos2=(M1-M3-XYc2*Xc+XYc2*x[2]-ZYc2*Zc+ZYc2*z[2])/(xc2*Xc/yc2-xc2*x[2]/yc2+(Yc-y[2])+zc2*Zc/yc2-zc2*z[2]/yc2);

Ykos3=(M1-M4-XYc3*Xc+XYc3*x[3]-ZYc3*Zc+ZYc3*z[3])/(xc3*Xc/yc3-xc3*x[3]/yc3+(Yc-y[3])+zc3*Zc/yc3-zc3*z[3]/yc3);

Xkos1=Ykos1*xc1/yc1+XYc1;Xkos2=Ykos2*xc2/yc2+XYc2;Xkos3=Ykos3*xc3/yc3+XYc3;

Zkos1=Ykos1*zc1/yc1+ZYc1;Zkos2=Ykos2*zc2/yc2+ZYc2;Zkos3=Ykos3*zc3/yc3+ZYc3;

line(40,600,200,600);line(40,640,200,640);line(40,680,200,680);line(40,720,200,720);line(40,760,200,760);

line(80,640,80,800);line(120,640,120,800);line(160,640,160,800);line(200,600,200,800);

outtextxy(53,618,"ТОЧКИКАСАНИЯ");

outtextxy(47,655,"АТОМ");outtextxy(87,655,"¹1");outtextxy(127,655,"¹2");outtextxy(167,655,"¹3");

outtextxy(45,695,"Xkos");outtextxy(45,735,"Ykos");outtextxy(45,775,"Zkos");

sprintf(st1,"%.1f",Xkos1);sprintf(st2,"%.1f",Xkos2);sprintf(st3,"%.1f",Xkos3);

outtextxy(81,695,st1);outtextxy(121,695,st2);outtextxy(161,695,st3);

sprintf(st1,"%.1f",Ykos1);sprintf(st2,"%.1f",Ykos2);sprintf(st3,"%.1f",Ykos3);

outtextxy(81,735,st1);outtextxy(121,735,st2);outtextxy(161,735,st3);

sprintf(st1,"%.1f",Zkos1);sprintf(st2,"%.1f",Zkos2);sprintf(st3,"%.1f",Zkos3);

outtextxy(81,775,st1);outtextxy(121,775,st2);outtextxy(161,775,st3);

setlinestyle(0,0,1);

p[4]=Zc;

int q=0,i,j,svet=4;

double h=Rc;

for(q=1;q<=4;q++)

{

i=stroim();

if (i==4)

{ setcolor(15);

if (raz!=0) setlinestyle(3,0,1);

circle(Xc+40,800-Yc,Rc);

ellipse(Xc+40,800-Yc,180,360,Rc,Rc/2);

ellipse(Xc+40,800-Yc-Rc/2,180,360,Rc-(Xc+Rc-(sqrt(Rc*Rc-(Rc/2)*(Rc/2))+Xc))-2,Rc/4);

ellipse(Xc+40,800-Yc+Rc/2,180,360,Rc-(Xc+Rc-(sqrt(Rc*Rc-(Rc/2)*(Rc/2))+Xc))-2,Rc/4);

setlinestyle(1,0,1);

ellipse(Xc+40,800-Yc,0,180,Rc,Rc/2);

ellipse(Xc+40,800-Yc-Rc/2,0,180,Rc-(Xc+Rc-(sqrt(Rc*Rc-(Rc/2)*(Rc/2))+Xc))-2,Rc/4);

ellipse(Xc+40,800-Yc+Rc/2,0,180,Rc-(Xc+Rc-(sqrt(Rc*Rc-(Rc/2)*(Rc/2))+Xc))-2,Rc/4);

if (raz==0) setlinestyle(0,0,1);

}

if (i!=4)

{

if (raz==0)

{

setcolor(0);setfillstyle(0,0);

pieslice(x[i]+40,800-y[i],0,360,r[i]);