Mode
m: [
["1","1"],
["2","2"],
["3","3"],
["4","4"],
["5","5"]
]
n: [
["1","1"],
["2","2"],
["3","3"],
["4","4"],
["5","5"]
]
Shape
[
["rect","Rectangle"],
["circle","Circle"]
]
Width m
Height m
Diameter m
Tension \ratio{N}{m}
Density \ratio{g}{m\sup{2}}
c = \tall{(}{200} \frac{T}{\rho} \tall{)}{200}\small{\sup{\ratio{1}{2}}}
\f\sub{mn} = \frac{c}{2} \tall{(}{200} \tall{(}{150} \frac{m}{L\sub{x}} \tall{)}{150}\sup{2} + \tall{(}{150} \frac{n}{L\sub{y}} \tall{)}{150}\sup{2} \tall{)}{200}\small{\sup{\ratio{1}{2}}}
\f\sub{mn} = \reg{0}{freq-readout} Hz
Outer Edges
Left:
Top:
Right:
Bottom:
Circumf.:
const plotSize = this.height - 325
const space = this.newPlot({
x: this.left+100,
y: -plotSize/2 ,
width: plotSize,
height: plotSize,
rangeX: [-.5,.5],
rangeY: [-.5,.5],
labelX: "Position x [m]",
labelY: "Position y [m]",
tickStepX: 0.1,
tickStepY: 0.1,
}).group
const frf = this.newPlot({
x: this.left + 100 + plotSize + 125,
y: -plotSize/2 -50,
width: plotSize,
height: plotSize + 100,
rangeX: [1,10000],
rangeY: [0,1.5],
labelX: "Driving Frequency \\f\\sub{dr} [Hz]",
labelY: "Displacement Amplitude \\xi [m]",
tickStepX: 10000,
tickStepY: 0.1,
typeX:"log",
tickArrayX:[1,10,100,{value:1000,label:"1k"},{value:10000,label:"10k"}]
}).group
let t
reg.time.onUpdate((tt)=>{
t = tt
})
const image = space.field(
(x,y)=>{
const T = reg.time.end
const m = reg.modeX.value
const n = reg.modeY.value
const X = reg.width.value
const Y = reg.height.value
return cos(2*pi*t/T) * sin((x-X/2) * m*pi/X) * sin((y-Y/2) * n*pi/Y)
}
,{
position: ()=>[ -reg.width.value/2, -reg.height.value/2 ],
size: ()=>[ reg.width.value, reg.height.value ],
resolution:[50,50],
minMax:[-1,1],
smooth:true
}
)
reg.time.onUpdate(()=>{
image.update()
})
reg.width.onUpdate(()=>{
image.update()
calcModeFreq()
})
reg.height.onUpdate(()=>{
image.update()
calcModeFreq()
})
reg.modeX.onUpdate(()=>{
image.update()
calcModeFreq()
})
reg.modeY.onUpdate(()=>{
image.update()
calcModeFreq()
})
reg.tension.onUpdate(()=>{
calcModeFreq()
})
reg.density.onUpdate(()=>{
calcModeFreq()
})
function calcModeFreq(){
const c = Math.sqrt(reg.tension.value/(reg.density.value*1e-3))
const f = 0.5 * c * Math.sqrt((reg.modeX.value/reg.width.value)**2 + (reg.modeY.value/reg.height.value)**2)
reg.freqReadout.textContent = Math.round(f)
return f
}