Emerging Ellipse
Posted: Wed Jul 21, 2021 8:07 am
REM*****edited by INDENTATOR 2.0 on 21-7-2021
/*
Draw many lines from an arbitrary point...
in a circle to its circumference.
Rotate each by 90 degrees around its centre.
What emerges is a perfect ellipse.
(from: Feynman's lost lecture)
*/
SET ORIENTATION LANDSCAPE
SET BUTTONS FONT SIZE 40
BUTTON ">" TEXT "next" AT 900,600 SIZE 80,80
GRAPHICS
OPTION ANGLE DEGREES
p=300
q=300
r=200 'circle
a=210
b=390 'arbitrary point
DRAW TEXT "Draw an arbitrary line..." AT 600,100
DRAW TEXT "...from an arbitrary..." AT 600,130
DRAW TEXT "...excentric point in a circle..." AT 600,160
DRAW TEXT "...to its circumference." AT 600,190
DRAW CIRCLE p,q SIZE r
DRAW CIRCLE p,q SIZE 2
DRAW CIRCLE a,b SIZE 3
m=5
f=b-m*a
g=f-q
u=1+m*m
v=2*g*m-2*p
w=p*p+g*g-r*r
x1=(-v-SQR(v*v-4*u*w))/2/u
y1=m*x1+f
DRAW LINE a,b TO x1,y1 'line to circumference
nxt()
DRAW TEXT "Rotate that line by..." AT 600,250
DRAW TEXT "...90 degrees around its centre." AT 600,280
'
xm=(x1+a)/2
ym=(y1+b)/2
yr1=-1/m+ym+xm/m
yr2=-1400/m+ym+xm/m
DRAW LINE 1,yr1 TO 1400,yr2 'perpendicular line
DRAW COLOR 0,0,0
DRAW LINE a,b TO x1,y1 'wipe line to circumference
DRAW COLOR 1,1,1
nxt()
'
DRAW TEXT "...and now with more random lines..." AT 600,350
nxt()
FOR ct=1 TO 100 STEP 1
lp:m=TAN(RND(360))
IF m=0 THEN GOTO lp
'
f=b-m*a
g=f-q
u=1+m^2
v=2*g*m-2*p
w=p^2+g^2-r^2
x1=(-v-SQR(v*v-4*u*w))/2/u
x2=(-v+SQR(v*v-4*u*w))/2/u
y1=m*x1+f
y2=m*x2+f
x1m=(x1+a)/2
y1m=(y1+b)/2 'coordinates of rotationpoint
x2m=(x2+a)/2
y2m=(y2+b)/2
yr1=-1/m+y1m+x1m/m
yr2=-1400/m+y1m+x1m/m
DRAW LINE 1,yr1 TO 1400,yr2
yr1=-1/m+y2m+x2m/m
yr2=-1400/m+y2m+x2m/m
DRAW LINE 1,yr1 TO 1400,yr2
PAUSE 1/ct
NEXT ct
DRAW FONT SIZE 30
DRAW TEXT "...A PERFECT ELLIPSE ! " AT 600,400
DEF nxt
BUTTON ">" SHOW
DO
SLOWDOWN
UNTIL BUTTON_PRESSED(">")
BUTTON ">" HIDE
END DEF
/*
Draw many lines from an arbitrary point...
in a circle to its circumference.
Rotate each by 90 degrees around its centre.
What emerges is a perfect ellipse.
(from: Feynman's lost lecture)
*/
SET ORIENTATION LANDSCAPE
SET BUTTONS FONT SIZE 40
BUTTON ">" TEXT "next" AT 900,600 SIZE 80,80
GRAPHICS
OPTION ANGLE DEGREES
p=300
q=300
r=200 'circle
a=210
b=390 'arbitrary point
DRAW TEXT "Draw an arbitrary line..." AT 600,100
DRAW TEXT "...from an arbitrary..." AT 600,130
DRAW TEXT "...excentric point in a circle..." AT 600,160
DRAW TEXT "...to its circumference." AT 600,190
DRAW CIRCLE p,q SIZE r
DRAW CIRCLE p,q SIZE 2
DRAW CIRCLE a,b SIZE 3
m=5
f=b-m*a
g=f-q
u=1+m*m
v=2*g*m-2*p
w=p*p+g*g-r*r
x1=(-v-SQR(v*v-4*u*w))/2/u
y1=m*x1+f
DRAW LINE a,b TO x1,y1 'line to circumference
nxt()
DRAW TEXT "Rotate that line by..." AT 600,250
DRAW TEXT "...90 degrees around its centre." AT 600,280
'
xm=(x1+a)/2
ym=(y1+b)/2
yr1=-1/m+ym+xm/m
yr2=-1400/m+ym+xm/m
DRAW LINE 1,yr1 TO 1400,yr2 'perpendicular line
DRAW COLOR 0,0,0
DRAW LINE a,b TO x1,y1 'wipe line to circumference
DRAW COLOR 1,1,1
nxt()
'
DRAW TEXT "...and now with more random lines..." AT 600,350
nxt()
FOR ct=1 TO 100 STEP 1
lp:m=TAN(RND(360))
IF m=0 THEN GOTO lp
'
f=b-m*a
g=f-q
u=1+m^2
v=2*g*m-2*p
w=p^2+g^2-r^2
x1=(-v-SQR(v*v-4*u*w))/2/u
x2=(-v+SQR(v*v-4*u*w))/2/u
y1=m*x1+f
y2=m*x2+f
x1m=(x1+a)/2
y1m=(y1+b)/2 'coordinates of rotationpoint
x2m=(x2+a)/2
y2m=(y2+b)/2
yr1=-1/m+y1m+x1m/m
yr2=-1400/m+y1m+x1m/m
DRAW LINE 1,yr1 TO 1400,yr2
yr1=-1/m+y2m+x2m/m
yr2=-1400/m+y2m+x2m/m
DRAW LINE 1,yr1 TO 1400,yr2
PAUSE 1/ct
NEXT ct
DRAW FONT SIZE 30
DRAW TEXT "...A PERFECT ELLIPSE ! " AT 600,400
DEF nxt
BUTTON ">" SHOW
DO
SLOWDOWN
UNTIL BUTTON_PRESSED(">")
BUTTON ">" HIDE
END DEF