'Coded in QB64 by Ashish on 9 March, 2018
'http://paulbourke.net/geometry/knots/
_TITLE "3D Knot [Press space for next knot]"
knot_type = 1
glAllow = -1
knot_type = knot_type + 1
ma = 0
IF knot_type
> 7 THEN knot_type
= 1
' static r, pos, theta, phi, beta
glInit = -1
' gluLookAt 0,0,-1,0,0,0,0,1,0
r
= .3 + .6 * SIN(6 * beta
) theta = 2 * beta
phi
= _PI(.6) * SIN(12 * beta
) _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) r
= 1.2 * 0.6 * SIN(_PI(.5) * 6 * beta
) theta = 4 * beta
_glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) k = 1
x
= COS(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 y
= SIN(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 z
= -SIN(2 * u
/ (2 * k
+ 1)) / 5 _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) k = 2
x
= COS(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 y
= SIN(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 z
= -SIN(2 * u
/ (2 * k
+ 1)) / 5 _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) k = 3
x
= COS(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 y
= SIN(u
) * (2 - COS(2 * u
/ (2 * k
+ 1))) / 5 z
= -SIN(2 * u
/ (2 * k
+ 1)) / 5 _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) x
= (41 * COS(u
) - 18 * SIN(u
) - 83 * COS(2 * u
) - 83 * SIN(2 * u
) - 11 * COS(3 * u
) + 27 * SIN(3 * u
)) / 200 y
= (36 * COS(u
) + 27 * SIN(u
) - 113 * COS(2 * u
) + 30 * SIN(2 * u
) + 11 * COS(3 * u
) - 27 * SIN(3 * u
)) / 200 z
= (45 * SIN(u
) - 30 * COS(2 * u
) + 113 * SIN(2 * u
) - 11 * COS(3 * u
) + 27 * SIN(3 * u
)) / 200 _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1) x
= (-22 * COS(u
) - 128 * SIN(u
) - 44 * COS(3 * u
) - 78 * SIN(3 * u
)) / 200 y
= (-10 * COS(2 * u
) - 27 * SIN(2 * u
) + 38 * COS(4 * u
) + 46 * SIN(4 * u
)) / 200 z
= (70 * COS(3 * u
) - 40 * SIN(3 * u
)) / 200 _glColor3f map
(x
, -1, 1, 0, 1), map
(y
, -1, 1, 0, 1), map
(z
, -1, 1, 0, 1)
clock = clock + .01
FUNCTION map!
(value!
, minRange!
, maxRange!
, newMinRange!
, newMaxRange!
) map! = ((value! - minRange!) / (maxRange! - minRange!)) * (newMaxRange! - newMinRange!) + newMinRange!