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 }