|
|
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 - metrics - 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;