Title "surf";
Parameters a[1,4], b[1,4],theta[0,pi/2],phi[-pi/8,pi/8];
Minimum;
StartProgram;
const xx: array[1..24] of double
=(0.703,1.698,1.698,0.703,-0.703,-1.698,-1.698,-0.703,1.246,3.008,3.008,1.246,-1.246,
-3.008,-3.008,-1.246,0,-2.926,-4.138,-2.926,0,2.926,4.138,2.926);
yy: array[1..24] of double
=(1.698,0.703,-0.703,-1.698,-1.698,-0.703,0.703,1.698,3.008,1.246,-1.246,-3.008,-3.008,
-1.246,1.246,3.008,4.138,2.926,0,-2.926,-4.138,-2.926,0,2.926);
var i,j: Integer;
Etot,r,angle,out1,out2,out3: double;
Ax,Ay,Ar,Ae,Bx,By,Br,Be,dist,rou: double;
M: array[1..3,1..24,1..4] of double;
Begin
for j:=1 to 24 do
begin
M[1,j,1]:=xx[j]; //这里xx【j】的方括号应该是英文,不知为啥小木虫自动删除了
M[1,j,2]:=yy[j];
end;
for i:=1 to 8 do
for j:=1 to 3 do
begin
M[j,i,3]:= 1.9;
M[j,i,4]:= 0.044;
M[j,i+8,3]:= 1.9;
M[j,i+8,4]:= 0.044;
M[j,i+16,3]:= 2.11;
M[j,i+16,4]:= 0.202;
end;
for i:=1 to 24 do
begin
r:=sqrt(M[1,i,1]*M[1,i,1]+M[1,i,2]*M[1,i,2]);
if M[1,i,1]>=0 then
angle:=arcsin(M[1,i,2]/r)
else
angle:= (M[1,i,2]/abs(M[1,i,2]))*(pi-abs(arcsin(M[1,i,2]/r)));
angle:=angle+phi;
M[1,i,1]:=r*cos(angle);
M[1,i,2]:=r*sin(angle);
M[2,i,1]:=M[1,i,1]+b;
M[3,i,1]:=M[1,i,1]+a*cos(theta);
M[3,i,2]:=M[1,i,2]+a*sin(theta);
end;
Etot:=0;
for i:=1 to 24 do
for j:=1 to 24 do
begin
Ax:=M[1,i,1];
Ay:=M[1,i,2];
Ar:=M[1,i,3];
Ae:=M[1,i,4];
Bx:=M[2,j,1];
By:=M[2,j,2];
Br:=M[2,j,3];
Be:=M[2,j,4];
dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
rou:=dist/(Ar+Br);
if dist>3.311 then
out1:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
else
out1:= 336.176*sqrt(Ae*Be)/(rou*rou);
Bx:=M[3,j,1];
By:=M[3,j,2];
Br:=M[3,j,3];
Be:=M[3,j,4];
dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
rou:=dist/(Ar+Br);
if dist>3.311 then
out2:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
else
out2:= 336.176*sqrt(Ae*Be)/(rou*rou);
Ax:=M[2,i,1];
Ay:=M[2,i,2];
Ar:=M[2,i,3];
Ae:=M[2,i,4];
dist:=sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
rou:=dist/(Ar+Br);
if dist>3.311 then
out3:= sqrt(Ae*Be)*(290000*exp(-12.5*rou)-2.25/exp(6*ln(rou)))
else
out3:= 336.176*sqrt(Ae*Be)/(rou*rou);
Etot:=out1+out2+out3+Etot;
end;
FunctionResult:= Etot;
End;
EndProgram;
for i:=1 to 24 do
begin
r:=sqrt(M[1,i,1]*M[1,i,1]+M[1,i,2]*M[1,i,2]);
if M[1,i,1]>=0 then
angle:=arcsin(M[1,i,2]/r)
else
if M[1,i,2]>=0 then
angle:= pi-abs(arcsin(M[1,i,2]/r))
else
angle:= -pi+abs(arcsin(M[1,i,2]/r));
angle:=angle+phi;
M[1,i,1]:=r*cos(angle);
M[1,i,2]:=r*sin(angle);
M[2,i,1]:=M[1,i,1]+b;
M[3,i,1]:=M[1,i,1]+a*cos(theta);
M[3,i,2]:=M[1,i,2]+a*sin(theta);
end;