It looks like you're new here. If you want to get involved, click one of these buttons!
Messing about with Fourier Series visualisations. Adjust the values to make pretty patterns.
-- Fourier
-- by West
-- visualisation of the path taken by a Fourier Series as a complex exponential. Top left adds and removes harmonics. Top right changes the frequency (the lower frequency takes longer to draw but has more points). The bar across the bottom sets the amplitude of each component.
--Tap in the centre to reset the trail
displayMode(FULLSCREEN_NO_BUTTONS)
-- Use this function to perform your initial setup
function setup()
x=WIDTH/2
y=HEIGHT*0.6
t=0
f=30
a={100,50}
bga=2
end
function draw()
t = t + 0.0001
fill(0,bga)
if bga>2 then bga=bga-10 end
rect(0,0,WIDTH,HEIGHT)
x=WIDTH/2
y=HEIGHT*0.6
for i=1,#a do
x=x+a[i]*math.sin(2*math.pi*i*f*t-math.pi/2)
y=y+a[i]*math.cos(2*math.pi*i*f*t-math.pi/2)
end
sprite("Cargo Bot:Star Filled",x,y,20,20)
for i=1,#a do
local div=WIDTH/#a
local tx=div/2+(i-1)*div
ty=0.1*HEIGHT
if math.fmod(i,2)==0 then
fill(30)
else
fill(40)
end
rect(tx-div/2,0,div,HEIGHT*0.2)
fill(255)
text(math.floor(a[i]),tx,ty)
end
fill(60,0,0)
rect(0,HEIGHT*0.9,WIDTH*0.1,HEIGHT*0.1)
fill(0,60,0)
rect(0.1*WIDTH,HEIGHT*0.9,WIDTH*0.1,HEIGHT*0.1)
fill(60,0,0)
rect(0.8*WIDTH,HEIGHT*0.9,WIDTH*0.1,HEIGHT*0.1)
fill(0,60,0)
rect(0.9*WIDTH,HEIGHT*0.9,WIDTH*0.1,HEIGHT*0.1)
fill(255)
font("Copperplate-Bold")
fontSize(40)
text("-",WIDTH*0.05,HEIGHT*0.95)
text("+",WIDTH*0.15,HEIGHT*0.95)
text("f-",WIDTH*0.85,HEIGHT*0.95)
text("f+",WIDTH*0.95,HEIGHT*0.95)
text("Frequency:"..f,WIDTH*0.5,HEIGHT*0.95)
end
function touched(t)
if t.state==ENDED then
if t.y>0.9*HEIGHT and t.x<0.1*WIDTH then
if #a>1 then
table.remove(a,#a)
end
elseif t.y>0.9*HEIGHT and t.x<0.2*WIDTH then
table.insert(a,0)
elseif t.y>0.9*HEIGHT and t.x>0.9*WIDTH then
f=f+1
elseif t.y>0.9*HEIGHT and t.x>0.8*WIDTH then
f=f-1
end
end
for i=1,#a do
local div=WIDTH/#a
local lx=(i-1)*div
local rx=(i)*div
if t.x>lx and t.x<rx then
if t.y<0.1*HEIGHT then
a[i] = a[i] - 1
elseif t.y<0.2*HEIGHT then
a[i] = a[i] + 1
else
bga=255
end
end
end
end
Comments
Now with the time series waveform included and launching with an approximation of a square wave