home *** CD-ROM | disk | FTP | other *** search
AmigaBASIC Source Code | 1986-11-20 | 2.6 KB | 109 lines |
- start:
- CLS
- SCREEN 1,640,200,4,2
- WINDOW 3,"3D-Surface",,0,1
- PALETTE 0,0,0,0
- PALETTE 2,1,1,0.47
- PALETTE 3,1,0.8,0
- PALETTE 4,1,0.6,0
- PALETTE 5,1,0.4,0
- PALETTE 6,0.8,0.8,0
- PALETTE 7,0.4,0.93,0.13
- PALETTE 8,0,1,0.6
- PALETTE 9,0,0.8,0.8
- PALETTE 10,0,0.4,0.8
- PALETTE 11,0.4,0.2,1
- PALETTE 12,0.6,0,1
- PALETTE 13,0.6,0,0.8
- PALETTE 14,0.4,0,0.6
- PALETTE 15,0.2,0,0.4
- DEFINT i-n:DIM ic(7),hm(7),xp(7),yp(7),wx(7),wy(7)
- ic=0:id=0
- PRINT "Choose plotting parameters"
- PRINT " (Suggested values in parenthesis)"
- INPUT"Speed to plot (1 slowest)";sp
- ln=512:mf=ln*2/3
- getpeaks:
- INPUT"Number of peaks in field (1 to 7)";a$
- np=VAL(a$):IF np<1 OR np>7 THEN getpeaks
- lm=50
- FOR i= 1 TO np
- circwaves:
- PRINT"Peak #";i;", circular form waves (y/n)? ";
- GOSUB getchar
- PRINT
- ic(i)=0
- IF a$="Y" THEN ic(i)=1
- IF a$<>"N" AND a$<>"Y" THEN circwaves
- PRINT "Peak #";i;", X position (0 to";mf;")";
- INPUT a$:xp(i)=VAL(a$)
- PRINT "Peak #";i;", Y position (0 to";mf;")";
- INPUT a$:yp(i)=VAL(a$)
- IF ic(i)=1 THEN m=mf/7 :ELSE m=mf/4.5
- PRINT "Peak #";i;", X wave length (";m;")";
- INPUT a$:wx(i)=6.28319/VAL(a$)
- PRINT "Peak #";i;", Y wave length (";m;")";
- INPUT a$:wy(i)=6.28319/VAL(a$)
- m=lm+xp(i)-20
- PRINT "Peak #"i", height multiplier (50 to"m")";
- INPUT a$:hm(i)=VAL(a$)
- NEXT i:CLS
- di=1/8192:k=7:nc=0:mm=640
- xscreen=0:yscreen=200
- FOR i=1 TO ln STEP sp
- il=2000:ih=-il
- FOR j=1 TO mf
- IF j>i THEN j=mf:GOTO skippoint
- ix=(i-j)*2:IF ix>mf THEN skippoint
- x=ix:Y=j:z=ix+lm
- FOR n=1 TO np
- x1=(x-xp(n))*wx(n)+di:y1=(Y-yp(n))*wy(n)+di
- w=SQR(x1*x1+y1*y1)+di
- IF ic(n)=1 THEN
- z=z-SIN(w)/w*hm(n)
- ELSE
- z=z-SIN(x1)/x1*SIN(y1)/y1*hm(n)
- END IF
- NEXT n
- iz=z
- IF iz<0 OR iz>mm GOTO skippoint
- IF iz>ih THEN
- ih=iz
- col=INT(w/2.5) AND 15
- PSET(xscreen,iz/2.2),col-(col=0)
- END IF
- IF iz<il THEN
- il=iz
- col=INT(w/2.5) AND 15
- PSET(xscreen,iz/2.2),col-(col=0)
- END IF
- skippoint:
- NEXT j
- xscreen=xscreen+sp
- NEXT i
- LOCATE 20,5
- question:
- PRINT "Finally done."
- LOCATE 21,5
- PRINT "Another one (Y/N)? ";
- GOSUB getchar
- IF a$="Y" THEN start
- IF a$="N" THEN done
- GOTO question
-
- done:
- WINDOW CLOSE 3
- SCREEN CLOSE 1
- END
-
- getchar:
- a$=""
- WHILE a$=""
- a$=INKEY$
- WEND
- a$=UCASE$(a$)
- PRINT a$;
- RETURN
-
-
-