Home » Archimedes archive » Archimedes World » AW-1995-05-Disc1.adf » AWMay95_1 » InTheMag/DrawBasic/Surface

InTheMag/DrawBasic/Surface

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1995-05-Disc1.adf » AWMay95_1
Filename: InTheMag/DrawBasic/Surface
Read OK:
File size: 0377 bytes
Load address: 0000
Exec address: 0000
File contents
REM -------------------------------------
REM 
REM See "Micro Computers in Geometry"
REM by Adrian Oldnow
REM publisher Ellis Horwood Ltd
REM
REM page 176-178
REM
REM --------------------------------------
REM For greater resolution increase value of n

n=20
DIM y(n),Y(n),x(n),X(n),z(n),Z(n)
�Fill(�Cream) : �Origin(8.5,6)

FOR j=0 TO n
 x=-PI+2*j*PI/n
 FOR i=0 TO n
 y=-PI+2*i*PI/n
 IF j=0 THEN
  z(i)=FNz(x,y)
  x(i)=FNProjectX(x,y,z(i))
  y(i)=FNProjectY(x,y,z(i))
 
 ELSE
  x(i)=X(i) : y(i)=Y(i) : z(i)=Z(i)
  Z(i)=FNz(x,y)
  X(i)=FNProjectX(x,y,Z(i))
  Y(i)=FNProjectY(x,y,Z(i))
 ENDIF
 NEXT
 IF j<>0 �Patch
 NEXT
 
�Quit

DEF �Patch
FOR i=0 TO n-1
�PathBegin(path)
�Move(x(i),y(i))
�Draw(x(i+1),y(i+1))
�Draw(X(i+1),Y(i+1))
�Draw(X(i),Y(i))
�CloseWithLine
�PathEnd
NEXT
ENDPROC


DEF FNProjectX(x,y,z)=1.75*(y-x/2)
DEF FNProjectY(x,y,z)=1.75*(z-x/2)

DEF FNz(x,y)=SIN((x*x+y*y)/2)
00000000  52 45 4d 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |REM ------------|
00000010  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000020  2d 2d 2d 2d 2d 2d 2d 2d  2d 0a 52 45 4d 20 0a 52  |---------.REM .R|
00000030  45 4d 20 53 65 65 20 22  4d 69 63 72 6f 20 43 6f  |EM See "Micro Co|
00000040  6d 70 75 74 65 72 73 20  69 6e 20 47 65 6f 6d 65  |mputers in Geome|
00000050  74 72 79 22 0a 52 45 4d  20 62 79 20 41 64 72 69  |try".REM by Adri|
00000060  61 6e 20 4f 6c 64 6e 6f  77 0a 52 45 4d 20 70 75  |an Oldnow.REM pu|
00000070  62 6c 69 73 68 65 72 20  45 6c 6c 69 73 20 48 6f  |blisher Ellis Ho|
00000080  72 77 6f 6f 64 20 4c 74  64 0a 52 45 4d 0a 52 45  |rwood Ltd.REM.RE|
00000090  4d 20 70 61 67 65 20 31  37 36 2d 31 37 38 0a 52  |M page 176-178.R|
000000a0  45 4d 0a 52 45 4d 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |EM.REM ---------|
000000b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000000c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 0a 52 45  |-------------.RE|
000000d0  4d 20 46 6f 72 20 67 72  65 61 74 65 72 20 72 65  |M For greater re|
000000e0  73 6f 6c 75 74 69 6f 6e  20 69 6e 63 72 65 61 73  |solution increas|
000000f0  65 20 76 61 6c 75 65 20  6f 66 20 6e 0a 0a 6e 3d  |e value of n..n=|
00000100  32 30 0a 44 49 4d 20 79  28 6e 29 2c 59 28 6e 29  |20.DIM y(n),Y(n)|
00000110  2c 78 28 6e 29 2c 58 28  6e 29 2c 7a 28 6e 29 2c  |,x(n),X(n),z(n),|
00000120  5a 28 6e 29 0a a0 46 69  6c 6c 28 bb 43 72 65 61  |Z(n)..Fill(.Crea|
00000130  6d 29 20 3a 20 a0 4f 72  69 67 69 6e 28 38 2e 35  |m) : .Origin(8.5|
00000140  2c 36 29 0a 0a 46 4f 52  20 6a 3d 30 20 54 4f 20  |,6)..FOR j=0 TO |
00000150  6e 0a 20 78 3d 2d 50 49  2b 32 2a 6a 2a 50 49 2f  |n. x=-PI+2*j*PI/|
00000160  6e 0a 20 46 4f 52 20 69  3d 30 20 54 4f 20 6e 0a  |n. FOR i=0 TO n.|
00000170  20 79 3d 2d 50 49 2b 32  2a 69 2a 50 49 2f 6e 0a  | y=-PI+2*i*PI/n.|
00000180  20 49 46 20 6a 3d 30 20  54 48 45 4e 0a 20 20 7a  | IF j=0 THEN.  z|
00000190  28 69 29 3d 46 4e 7a 28  78 2c 79 29 0a 20 20 78  |(i)=FNz(x,y).  x|
000001a0  28 69 29 3d 46 4e 50 72  6f 6a 65 63 74 58 28 78  |(i)=FNProjectX(x|
000001b0  2c 79 2c 7a 28 69 29 29  0a 20 20 79 28 69 29 3d  |,y,z(i)).  y(i)=|
000001c0  46 4e 50 72 6f 6a 65 63  74 59 28 78 2c 79 2c 7a  |FNProjectY(x,y,z|
000001d0  28 69 29 29 0a 20 0a 20  45 4c 53 45 0a 20 20 78  |(i)). . ELSE.  x|
000001e0  28 69 29 3d 58 28 69 29  20 3a 20 79 28 69 29 3d  |(i)=X(i) : y(i)=|
000001f0  59 28 69 29 20 3a 20 7a  28 69 29 3d 5a 28 69 29  |Y(i) : z(i)=Z(i)|
00000200  0a 20 20 5a 28 69 29 3d  46 4e 7a 28 78 2c 79 29  |.  Z(i)=FNz(x,y)|
00000210  0a 20 20 58 28 69 29 3d  46 4e 50 72 6f 6a 65 63  |.  X(i)=FNProjec|
00000220  74 58 28 78 2c 79 2c 5a  28 69 29 29 0a 20 20 59  |tX(x,y,Z(i)).  Y|
00000230  28 69 29 3d 46 4e 50 72  6f 6a 65 63 74 59 28 78  |(i)=FNProjectY(x|
00000240  2c 79 2c 5a 28 69 29 29  0a 20 45 4e 44 49 46 0a  |,y,Z(i)). ENDIF.|
00000250  20 4e 45 58 54 0a 20 49  46 20 6a 3c 3e 30 20 a0  | NEXT. IF j<>0 .|
00000260  50 61 74 63 68 0a 20 4e  45 58 54 0a 20 0a a0 51  |Patch. NEXT. ..Q|
00000270  75 69 74 0a 0a 44 45 46  20 a0 50 61 74 63 68 0a  |uit..DEF .Patch.|
00000280  46 4f 52 20 69 3d 30 20  54 4f 20 6e 2d 31 0a a0  |FOR i=0 TO n-1..|
00000290  50 61 74 68 42 65 67 69  6e 28 70 61 74 68 29 0a  |PathBegin(path).|
000002a0  a0 4d 6f 76 65 28 78 28  69 29 2c 79 28 69 29 29  |.Move(x(i),y(i))|
000002b0  0a a0 44 72 61 77 28 78  28 69 2b 31 29 2c 79 28  |..Draw(x(i+1),y(|
000002c0  69 2b 31 29 29 0a a0 44  72 61 77 28 58 28 69 2b  |i+1))..Draw(X(i+|
000002d0  31 29 2c 59 28 69 2b 31  29 29 0a a0 44 72 61 77  |1),Y(i+1))..Draw|
000002e0  28 58 28 69 29 2c 59 28  69 29 29 0a a0 43 6c 6f  |(X(i),Y(i))..Clo|
000002f0  73 65 57 69 74 68 4c 69  6e 65 0a a0 50 61 74 68  |seWithLine..Path|
00000300  45 6e 64 0a 4e 45 58 54  0a 45 4e 44 50 52 4f 43  |End.NEXT.ENDPROC|
00000310  0a 0a 0a 44 45 46 20 46  4e 50 72 6f 6a 65 63 74  |...DEF FNProject|
00000320  58 28 78 2c 79 2c 7a 29  3d 31 2e 37 35 2a 28 79  |X(x,y,z)=1.75*(y|
00000330  2d 78 2f 32 29 0a 44 45  46 20 46 4e 50 72 6f 6a  |-x/2).DEF FNProj|
00000340  65 63 74 59 28 78 2c 79  2c 7a 29 3d 31 2e 37 35  |ectY(x,y,z)=1.75|
00000350  2a 28 7a 2d 78 2f 32 29  0a 0a 44 45 46 20 46 4e  |*(z-x/2)..DEF FN|
00000360  7a 28 78 2c 79 29 3d 53  49 4e 28 28 78 2a 78 2b  |z(x,y)=SIN((x*x+|
00000370  79 2a 79 29 2f 32 29                              |y*y)/2)|
00000377