Ok, last one from me, this is an exact clone of that video minus some minor perspective and proportion adjustment
dim shared pi, sw, sh
pi = 4*atn(1)
sw = 640
sh = 480
rr = 500
h = 1200
screen 12
do
for t=0 to h step 10
line (0,0)-(sw,sh),0,bf
hyperb rr, t, 0, 0
_display
_limit 100
next
for b=0 to 0.80*pi/2 step 0.008
line (0,0)-(sw,sh),0,bf
hyperb rr, h, b, 0
_display
_limit 100
next
_delay 0.5
for rot = 0 to 0.9*pi/2 step 0.01
line (0,0)-(sw,sh),0,bf
hyperb rr, h, 0.80*pi/2, rot
_display
_limit 100
next
_delay 0.5
for i=0 to 1 step 0.005
line (0,0)-(sw,sh),0,bf
hyperb rr, h, (1 - i)*0.80*pi/2, (1 - i)*0.9*pi/2
_display
_limit 100
next
for t=0 to h step 10
line (0,0)-(sw,sh),0,bf
hyperb rr, h-t, 0, 0
_display
_limit 100
next
loop
system
'radius, height, twist, rotate
sub hyperb (r, h, b, rot)
a = 0
x = r*cos(a - b)
z = r*sin(a - b)
y = -h/2 + 200
yy = y*cos(rot) - z*sin(rot)
zz = y*sin(rot) + z*cos(rot)
y = yy
z = zz
ox = x
oz = z
oy = y
x = r*cos(a + b)
z = r*sin(a + b)
y = h/2 + 200
yy = y*cos(rot) - z*sin(rot)
zz = y*sin(rot) + z*cos(rot)
y = yy
z = zz
oxx = x
oyy = y
ozz = z
for a = 2*pi/30 to 2*pi step 2*pi/30
x = r*cos(a - b)
z = r*sin(a - b)
y = -h/2 + 200
yy = y*cos(rot) - z*sin(rot)
zz = y*sin(rot) + z*cos(rot)
y = yy
z = zz
pset (sw/2 + ox*700/(oz + 2500), sh/2 - 50 + oy*700/(oz + 2500))
line -(sw/2 + x*700/( z + 2500), sh/2 - 50 + y*700/( z + 2500))
ox = x
oy = y
oz = z
x = r*cos(a + b)
z = r*sin(a + b)
y = h/2 + 200
yy = y*cos(rot) - z*sin(rot)
zz = y*sin(rot) + z*cos(rot)
y = yy
z = zz
line -(sw/2 + x*700/( z + 2500), sh/2 - 50 + y*700/( z + 2500))
line -(sw/2 + oxx*700/(ozz + 2500), sh/2 - 50 + oyy*700/(ozz + 2500))
oxx = x
oyy = y
ozz = z
next
end sub
edit: fixed