perm filename TENSOR.SAI[GEM,BGB] blob
sn#097094 filedate 1974-05-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001 VALID 00005 PAGES
C00002 00002 BEGIN "TENSOR"
C00003 00003 SUBR METH1
C00005 00004
C00007 00005 SCALE ← 80
C00009 ENDMK
C⊗;
BEGIN "TENSOR"
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
REQUIRE "DPYIII[SYS,BGB]" SOURCE_FILE;
SAFE ITG ARRAY DPYBUF[0:600];
PRELOAD_WITH 0,4.0,-2.0, 2.9;REAL ARRAY XWC[0:3];
PRELOAD_WITH 0,3.5, 2.0,-3.9;REAL ARRAY YWC[0:3];
REAL SCALE,AA,BB,C,S;
SUBR METH1;
BEGIN "METH1"
ITG I;
REAL R1,C1,R2,C2,DR,DC;
REAL MX,MY,PR,A,B,X,Y;
REAL MXX0,MYY0,PXY0,A0,X0,Y0,PXY1;
REAL PHI;
MXX0←MYY0←PXY0←A0←X0←Y0←0;
R2 ← 5-YWC[3];
C2 ← XWC[3]-5;
FOR I←1 THRU 3 DO
BEGIN
R1←R2; C1←C2;
R2 ← 5-YWC[I];
C2 ← XWC[I]-5;
DC ← C2-C1;
DR ← R1-R2;
α TRIANGULAR PORTION;
A ← DC*DR/2;
X ← (2*C2 + C1)/3;
Y ← (2*R1 + R2)/3;
MX ← A*DR*DR/18;
MY ← A*DC*DC/18;
PR ← -A*A/18;
α ACCUMULATE PORTIONS;
A0 ← A0 + A;
X0 ← X0 + X*A;
Y0 ← Y0 + Y*A;
MYY0 ← MYY0 + MY + X*X*A;
MXX0 ← MXX0 + MX + Y*Y*A;
PXY0 ← PXY0 + PR - X*Y*A;
α RECTANGULAR PORTION;
A ← DC*R1;
X ← (C1+C2)/2;
Y ← R1/2;
MX ← A*R1*R1/12;
MY ← A*DC*DC/12;
α ACCUMULATE PORTIONS;
A0 ← A0 + A;
X0 ← X0 + X*A;
Y0 ← Y0 + Y*A;
MYY0 ← MYY0 + MY + X*X*A;
MXX0 ← MXX0 + MX + Y*Y*A;
PXY0 ← PXY0 + PR - X*Y*A;
END;
α COMPUTE TENSOR WITH RESPECT TO CENTER OF MASS;
X ← X0/A0; XWC[0] ← X-5;
Y ← Y0/A0; YWC[0] ← 5-Y;
MX ← MXX0 - Y*Y*A0;
MY ← MYY0 - X*X*A0;
PR ← PXY0 + X*Y*A0;
OUTSTR(" MX = "&CVG(MX)&" MY = "&CVG(MY)&" PR = "&CVG(PR)&↓);
PHI ← 0.5 * ATAN2(2*PR,MY-MX);
C ← COS(PHI); S ← SIN(PHI);
PXY0 ← (C*C-S*S)*PR + C*S*(MX-MY);
MXX0 ← C*C*MX + S*S*MY + 2*C*S*PR;
MYY0 ← C*C*MY + S*S*MX - 2*C*S*PR;
OUTSTR(" PHI = "&CVS(180*PHI/π)&" PXY0 = "&CVG(PXY0)&↓);
MXX0←MXX0*12;
MYY0←MYY0*12;
AA← A ← SQRT(MXX0/A0);
BB← B ← SQRT(MYY0/A0);
DO BEGIN
AA ← SQRT(MXX0/(A*B));
BB ← SQRT(MYY0/(A*B));
A ← (A+AA)/2;
B ← (B+BB)/2;
END UNTIL ABS(A-AA)≤1@-5 ∧ ABS(B-BB)≤1@-5;
AA ← A/2;BB ← B/2;
END "METH1";
SCALE ← 80;
DPYSET(DPYBUF);
AIVECT(-400,-400);
AVECT(400,-400);AVECT(400,400);
AVECT(-400,400);AVECT(-400,-400);
AIVECT(XWC[1]*SCALE,YWC[1]*SCALE);
AVECT(XWC[2]*SCALE,YWC[2]*SCALE);
AVECT(XWC[3]*SCALE,YWC[3]*SCALE);
AVECT(XWC[1]*SCALE,YWC[1]*SCALE);
METH1;
AIVECT(XWC[0]*SCALE-20,YWC[0]*SCALE);
AVECT(XWC[0]*SCALE+20,YWC[0]*SCALE);
AIVECT(XWC[0]*SCALE,YWC[0]*SCALE-20);
AVECT(XWC[0]*SCALE,YWC[0]*SCALE+20);
OUTSTR(" AA = "&CVG(AA)&" BB = "&CVG(BB)&↓);
AA ← SCALE*AA;
BB ← SCALE*BB;
AIVECT(SCALE*XWC[0]-AA*S+BB*C,SCALE*YWC[0]+AA*C+BB*S);
AVECT(SCALE*XWC[0]-AA*S-BB*C,SCALE*YWC[0]+AA*C-BB*S);
AVECT(SCALE*XWC[0]+AA*S-BB*C,SCALE*YWC[0]-AA*C-BB*S);
AVECT(SCALE*XWC[0]+AA*S+BB*C,SCALE*YWC[0]-AA*C+BB*S);
AVECT(SCALE*XWC[0]-AA*S+BB*C,SCALE*YWC[0]+AA*C+BB*S);
DPYOUT(0);
WHILE TRUE DO INCHRW;
END "TENSOR";