Acoustic Reflection Coefficient Calculator

Calculation Method: ${method}

`; resultHTML += `

Reflection Coefficient: ${data['Reflection Coefficient (Amplitude)']} (${data['Reflection Coefficient (%)']})

`; resultHTML += `

Power Reflection: ${data['Power Reflection Coefficient']} (${data['Power Reflection (%)']})

`; document.getElementById('result-values').innerHTML = resultHTML; // Populate table const tableBody = document.getElementById('result-table-body'); tableBody.innerHTML = ''; for (const [key, value] of Object.entries(data)) { const row = document.createElement('tr'); const cell1 = document.createElement('td'); cell1.textContent = key; row.appendChild(cell1); const cell2 = document.createElement('td'); cell2.textContent = value; row.appendChild(cell2); tableBody.appendChild(row); } // Create visualization createVisualization(reflectionCoefficient); document.getElementById('results').style.display = 'block'; } function createVisualization(reflectionCoefficient) { const viz = document.getElementById('visualization'); viz.innerHTML = ''; // Add interface line const interface = document.createElement('div'); interface.className = 'interface-line'; viz.appendChild(interface); // Add medium labels const medium1 = document.createElement('div'); medium1.className = 'medium-label'; medium1.style.left = '20%'; medium1.textContent = 'Medium 1'; viz.appendChild(medium1); const medium2 = document.createElement('div'); medium2.className = 'medium-label'; medium2.style.right = '20%'; medium2.textContent = 'Medium 2'; viz.appendChild(medium2); // Add waves const incidentWave = document.createElement('div'); incidentWave.className = 'wave incident-wave'; incidentWave.style.width = '40%'; incidentWave.style.left = '0%'; viz.appendChild(incidentWave); const reflectedWave = document.createElement('div'); reflectedWave.className = 'wave reflected-wave'; reflectedWave.style.width = `${40 * Math.abs(reflectionCoefficient)}%`; reflectedWave.style.left = `${60 - (40 * Math.abs(reflectionCoefficient))}%`; viz.appendChild(reflectedWave); } function generatePDF() { try { const { jsPDF } = window.jspdf; const doc = new jsPDF(); // Title doc.setFontSize(18); doc.text('Acoustic Reflection Report', 105, 15, { align: 'center' }); // Date doc.setFontSize(10); doc.text(`Generated: ${new Date().toLocaleString()}`, 105, 22, { align: 'center' }); // Add results summary doc.setFontSize(12); const resultValues = document.getElementById('result-values').textContent; const lines = resultValues.split('\n').filter(line => line.trim() !== ''); let yPos = 40; lines.forEach(line => { doc.text(line.trim(), 14, yPos); yPos += 7; }); // Add table data yPos += 10; doc.setFontSize(14); doc.text('Detailed Parameters:', 14, yPos); yPos += 10; doc.setFontSize(12); const table = document.getElementById('result-table-body'); const rows = table.querySelectorAll('tr'); rows.forEach(row => { const cells = row.querySelectorAll('td'); doc.text(`${cells[0].textContent}: ${cells[1].textContent}`, 20, yPos); yPos += 7; }); // Add note about visualization yPos += 10; doc.text('Note: The wave reflection visualization is available in the web version.', 14, yPos); // Save PDF doc.save('Acoustic_Reflection_Report.pdf'); } catch (error) { console.error('PDF generation error:', error); alert('PDF generation failed. Please try again or check your internet connection.'); } }
Scroll to Top