%%HP: T(3)A(D)F(.);
DIR
SFACE \<<
SPAR OBJ\-> DROP 0
\-> xa xb xi ya yb yi theta phi p z h v d
\<<
-20 -21 -22 SF CF CF
RAD
ya yb FOR J
J 'Y' STO
xa xb FOR I
I 'X' STO DEPTH 'd' STO
IFERR EQ \->NUM THEN
DEPTH d - DROPN 0
END
IF DUP TYPE 1 == THEN
DROP 0
END
yi STEP
xi STEP
yb ya - ABS 1 +
xb xa - ABS 1 +
2 \->LIST
\->ARRY 'MAT' STO
{ X Y } PURGE
DEG
-20 -21 -22 CF SF SF
TRACE
\>>
\>>
TRACE \<<
SPAR OBJ\-> DROP \->
xa xb xi ya yb yi theta phi p z h v
\<<
0 0 0 0 0 \-> cphi sphi ctheta stheta prv
\<<
PICT PURGE
{ # 0d # 0d } PVIEW
AXIS
RAD
theta \pi * 180 / \->NUM DUP
SIN 'stheta' STO
COS 'ctheta' STO
phi \pi * 180 / \->NUM DUP
SIN 'sphi' STO
COS 'cphi' STO
ya yb FOR j
j cphi * xa ctheta * - h * 65 + 0 RND # 1d *
63 j NEG sphi * xa stheta * - v * 31 + 0 RND
MAT 1 j ya - yi * 1 + 2 \->LIST GET
IF p 0 \=/ THEN
IF DUP DUP z < p 0 > AND SWAP z > p 0 < AND OR THEN
DROP z
END
END
+ - # 1d * 2 \->LIST 'prv' STO
1 xa + xb FOR i
prv j cphi * i ctheta * - h * 65 + 0 RND # 1d *
63 j NEG sphi * i stheta * - v * 31 + 0 RND
MAT i xa - xi * 1 + j ya - yi * 1 + 2 \->LIST GET
IF p 0 \=/ THEN
IF DUP DUP z < p 0 > AND SWAP z > p 0 < AND OR THEN
DROP z
END
END
+ - # 1d * 2 \->LIST DUP 'prv' STO
LINE
xi STEP
yi STEP
xa xb FOR i
ya cphi * i ctheta * - h * 65 + 0 RND # 1d *
63 ya NEG sphi * i stheta * - v * 31 + 0 RND
MAT i xa - xi * 1 + 1 2 \->LIST GET
IF p 0 \=/ THEN
IF DUP DUP z < p 0 > AND SWAP z > p 0 < AND OR THEN
DROP z
END
END
+ - # 1d * 2 \->LIST 'prv' STO
1 ya + yb FOR j
prv j cphi * i ctheta * - h * 65 + 0 RND # 1d *
63 j NEG sphi * i stheta * - v * 31 + 0 RND
MAT i xa - xi * 1 + j ya - yi * 1 + 2 \->LIST GET
IF p 0 \=/ THEN
IF DUP DUP z < p 0 > AND SWAP z > p 0 < AND OR THEN
DROP z
END
END
+ - # 1d * 2 \->LIST DUP 'prv' STO
LINE
yi STEP
xi STEP
DEG
PICT RCL 'GRPH' STO
DO
UNTIL KEY END DROP
\>>
\>>
\>>
AXIS \<<
SPAR OBJ\-> DROP \->
xa xb xi ya yb yi theta phi p z h v
\<<
DEG
{ # 65d # 32d } DUP DUP
{ # 65d # 0d } LINE
10 h * theta COS * NEG 65 + 0 RND # 1d *
63 10 v * theta SIN * NEG 31 + - 0 RND # 1d *
2 \->LIST LINE
10 h * phi COS * 65 + 0 RND # 1d *
63 10 v * phi SIN * NEG 31 + - 0 RND # 1d *
2 \->LIST LINE
\>>
\>>
SPAR { -5 5 1 -5 5 1 30 45 0 0 5 3 }
EQ 'Y^2-X^2'
MAT [[ 0 9 16 21 24 25 24 21 16 9 0 ]
[ -9 0 7 12 15 16 15 12 7 0 -9 ]
[ -16 -7 0 5 8 9 8 5 0 -7 -16 ]
[ -21 -12 -5 0 3 4 3 0 -5 -12 -21 ]
[ -24 -15 -8 -3 0 1 0 -3 -8 -15 -24 ]
[ -25 -16 -9 -4 -1 0 -1 -4 -9 -16 -25 ]
[ -24 -15 -8 -3 0 1 0 -3 -8 -15 -24 ]
[ -21 -12 -5 0 3 4 3 0 -5 -12 -21 ]
[ -16 -7 0 5 8 9 8 5 0 -7 -16 ]
[ -9 0 7 12 15 16 15 12 7 0 -9 ]
[ 0 9 16 21 24 25 24 21 16 9 0 ]]
END