|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4992 (0x1380) Notes: Mikados TextFile, Mikados_K Names: »FFTPLOT«
└─⟦d110b5765⟧ Bits:30005308 Eksamensopgave i dynamiske systemer med FFT └─ ⟦this⟧ »FFTPLOT«
SEGMENT PROCEDURE FFTPLOT(N,ANTPKT:INTEGER; X,Y : PUNKTER; TEGN : SYMBOLER; AFRUND:BOOLEAN); (* PLOTTER PUNKTERNE MED KOORDINATER (X(I,J),Y(I,J)) HVOR J ER KURVENS NUMMER OG I ER PUNKTETS PAA KURVEN N ER ANTALLET AF KURVER. ANTPKT ER ANTALLET AF PUNKTER FAELLES FOR ALLE KURVER. TEGN KURVE J TEGNES MED TEGNET TEGN(J) AFRUND TRUE SAA AFRUNDES ENHEDERNE PA X-AKSEN FALSE INGEN AFRUNDING. *) TYPE AKSE=(XAKSE,YAKSE); VAR SX,FX,SY,FY,XMIN,YMIN : REAL; R,S,XP,YP,I,J,KURVE,PKT : INTEGER; FUNCTION POW10(E:INTEGER):REAL; (* UDREGNER 10**E FOR -37<=E<=37 *) BEGIN IF E>0 THEN POW10:=PWROFTEN(E) ELSE BEGIN E:=-E; POW10:=1.0/PWROFTEN(E); END; END; PROCEDURE SKALERING(Y : PUNKTER; AKS:AKSE; D,P,Q,R : INTEGER; VAR S,F : REAL); (* SKALERER VAERDIERNE I Y AKS: XAKSE INGEN VIRKNING YAKSE HVIS VAERIDERNE ER SYMMETRISKE OM X-AKSEN INDRETTES FORSKYDNINGEN SAA DEN KOMMER MIDT PAA SKAERMEN. ER DER LUTTER POSITIVE BLIVER NEDERSTE LINIE X-AKSEN. ER DER LUTTER NEGATIVE BLIVER DEN 0VERSTE. D ER ANTALLET AF SKALAENHEDER PAA DEN 0NSKEDE AKSE. P,Q Y GENNEMGAAS FRA S0JLE P TIL S0JLE Q R ANTALLET AF PUNKTER S0JLERNE. S DEN FUNDNE SKALAENHED F -"- ---"-- FORSKYDNING. PUNKT MED KOORDINATER X(I,J),Y(I,J) PLOTTES I POS. (XP,XY) = (SX*X+FX, SY*Y+FY). (SY,FY,SX,FX BRUGES VED KALDET AF SKALERING *) VAR YMAX,HELP : REAL; E : INTEGER; BEGIN YMIN:=Y(1,P); YMAX:=YMIN; FOR J:=P TO Q DO FOR I:= 1 TO R DO BEGIN HELP:= Y(I,J); IF HELP>YMAX THEN YMAX:=HELP; IF HELP<YMIN THEN YMIN:=HELP; END; IF ABS(YMAX-YMIN)<=1E-10 THEN BEGIN IF ABS(YMAX)>=1E-10 THEN S:=10.0/YMAX ELSE S:=10 END ELSE S:=(D-1)/(YMAX-YMIN); E:=TRUNC(LN(S)/LN(10)); IF S<=1 THEN E:=E-1; S:=S/POW10(E); IF S<2 THEN HELP:=1 ELSE IF S<5 THEN HELP:=2 ELSE HELP:=5; S:=HELP*POW10(E); IF AKS=YAKSE THEN BEGIN F:=(D+1 -S*(YMAX+YMIN))/2; IF YMIN>=0 THEN F:=1; IF YMAX<=0 THEN F:=21; IF ABS(S*(YMIN+YMAX))<=1.5 THEN F:=11; END ELSE F:=(D+1-S*(YMAX+YMIN))/2; END (* SKALERING *); BEGIN SKALERING(X,XAKSE,80,1,N,ANTPKT,SX,FX); IF TEST THEN WRITELN('SX= ',SX,'FX= ',FX); SKALERING(Y,YAKSE,23,1,N,ANTPKT,SY,FY); FY:=23-FY; IF TEST THEN BEGIN WRITELN('SY=',SY,'FY= ',FY); READLN; END; SY:=-SY; CLEARSCREEN; (* VANDRETTE LINIER *) R:=2; REPEAT GOTOXY(10,R); WRITE('--------------------------------------------------'); WRITE('--------------------'); R:=R+5; UNTIL R>23; (* ENHEDER PAA X-AKSEN *) S:=6; REPEAT GOTOXY(S,24); IF AFRUND THEN WRITE(ROUND((S-FX+4)/SX)*1.0:9:3) ELSE WRITE((S-FX+4)/SX:9:3); S:=S+10; UNTIL S>70; R:=10; (* LODRETTE LINIER *) REPEAT S:=1; REPEAT GOTOXY(R,S); WRITE('ø'); S:=S+1; UNTIL S=24; R:=R+10; UNTIL R = 80; (* ENHEDER PAA Y-AKSEN *) R:=2; REPEAT GOTOXY(1,R); WRITE( (R-FY)/SY:9:3); R:=R+5; UNTIL R>23; (* UDTEGNING AF KURVERNE *) FOR KURVE:=1 TO N DO FOR PKT:=1 TO ANTPKT DO BEGIN XP:=ROUND(SX*X(PKT,KURVE) + FX); IF XP>80 THEN XP:=80 ELSE IF XP<1 THEN XP:=1; YP:=ROUND(SY*Y(PKT,KURVE) + FY); IF YP>23 THEN YP:=23 ELSE IF YP<1 THEN YP:=1; GOTOXY(XP,YP); WRITE(TEGN(KURVE)); END; GOTOXY(1,23); END;