Beam Analysis
// Function to dynamically update load inputs based on the selected load type
document.getElementById('loadType').addEventListener('change', function() {
const loadType = this.value;
const loadDetails = document.getElementById('loadDetails');
loadDetails.innerHTML = '';
if (loadType === 'point' || loadType === 'combination') {
loadDetails.innerHTML += `
`;
}
if (loadType === 'udl' || loadType === 'combination') {
loadDetails.innerHTML += `
`;
}
});
// Function to calculate shear force and bending moment
function calculate() {
const beamLength = parseFloat(document.getElementById('beamLength').value);
const loadType = document.getElementById('loadType').value;
const supportLeft = document.getElementById('supportLeft').value;
const supportRight = document.getElementById('supportRight').value;
let pointLoadMagnitude = 0, pointLoadPosition = 0;
let udlMagnitude = 0, udlStart = 0, udlEnd = 0;
if (loadType === 'point' || loadType === 'combination') {
pointLoadMagnitude = parseFloat(document.getElementById('pointLoadMagnitude').value);
pointLoadPosition = parseFloat(document.getElementById('pointLoadPosition').value);
}
if (loadType === 'udl' || loadType === 'combination') {
udlMagnitude = parseFloat(document.getElementById('udlMagnitude').value);
udlStart = parseFloat(document.getElementById('udlStart').value);
udlEnd = parseFloat(document.getElementById('udlEnd').value);
}
// Calculate reactions, shear forces, and bending moments
const results = calculateBeam(beamLength, loadType, pointLoadMagnitude, pointLoadPosition, udlMagnitude, udlStart, udlEnd, supportLeft, supportRight);
// Display results
document.getElementById('maxShear').innerText = `Maximum Shear Force: ${results.maxShear} kN`;
document.getElementById('maxMoment').innerText = `Maximum Bending Moment: ${results.maxMoment} kNm`;
drawCharts(results);
}
// Function to calculate beam reactions, shear forces, and moments
function calculateBeam(beamLength, loadType, pointLoadMagnitude, pointLoadPosition, udlMagnitude, udlStart, udlEnd, supportLeft, supportRight) {
let maxShear = 0;
let maxMoment = 0;
const shearForce = [];
const bendingMoment = [];
const numSegments = 100; // Number of segments for the calculation
const dx = beamLength / numSegments;
for (let i = 0; i <= numSegments; i++) {
const x = i * dx;
let shear = 0;
let moment = 0;
// Calculate shear force and moment due to point load
if (pointLoadMagnitude > 0 && x >= pointLoadPosition) {
shear -= pointLoadMagnitude;
moment -= pointLoadMagnitude * (x - pointLoadPosition);
}
// Calculate shear force and moment due to UDL
if (udlMagnitude > 0 && x >= udlStart && x <= udlEnd) {
const udlLength = Math.min(x, udlEnd) - udlStart;
shear -= udlMagnitude * udlLength;
moment -= udlMagnitude * udlLength * (x - udlStart - udlLength / 2);
}
shearForce.push(shear);
bendingMoment.push(moment);
if (Math.abs(shear) > Math.abs(maxShear)) maxShear = shear;
if (Math.abs(moment) > Math.abs(maxMoment)) maxMoment = moment;
}
return { shearForce, bendingMoment, maxShear, maxMoment };
}
// Function to draw shear force and bending moment diagrams
function drawCharts(results) {
const ctxShear = document.getElementById('shearForceDiagram').getContext('2d');
const ctxMoment = document.getElementById('bendingMomentDiagram').getContext('2d');
new Chart(ctxShear, {
type: 'line',
data: {
labels: Array.from({length: results.shearForce.length}, (_, i) => i),
datasets: [{
label: 'Shear Force (kN)',
data: results.shearForce,
borderColor: 'red',
fill: false
}]
},
options: {
responsive: true,
scales: {
x: {
title: {
display: true,
text: 'Position Along Beam (m)'
}
},
y: {
title: {
display: true,
text: 'Shear Force (kN)'
}
}
}
}
});
new Chart(ctxMoment, {
type: 'line',
data: {
labels: Array.from({length: results.bendingMoment.length}, (_, i) => i),
datasets: [{
label: 'Bending Moment (kNm)',
data: results.bendingMoment,
borderColor: 'blue',
fill: false
}]
},
options: {
responsive: true,
scales: {
x: {
title: {
display: true,
text: 'Position Along Beam (m)'
}
},
y: {
title: {
display: true,
text: 'Bending Moment (kNm)'
}
}
}
}
});
}