/** * Avaliação de conforto humano (NBR 6123:2023, sec. 9.6). * * Aceleração-limite: * a_lim = 0,01 · k_a · f^1.124 (m/s²) * * onde k_a = 6,12 (escritórios) ou 4,058 (residências). */ export interface ComfortInput { /** Frequência de vibração f (Hz) */ freq: number; /** Aceleração máxima a_max (m/s²) — calculada pelo usuário */ aMax: number; /** Tipo de uso */ use: 'residential' | 'commercial'; } export interface ComfortResult { aLim: number; use: 'residential' | 'commercial'; ok: boolean; ratio: number; description: string; } export function evaluateComfort(input: ComfortInput): ComfortResult { const { freq, aMax, use } = input; if (freq < 0.06 || freq > 1) { return { aLim: 0, use, ok: false, ratio: 0, description: 'Fora da faixa 0,06–1,00 Hz — aplicar critério da ISO 10137.', }; } const ka = use === 'commercial' ? 6.12 : 4.06; const aLim = 0.01 * ka * Math.pow(freq, 1.124); const ratio = aMax / aLim; return { aLim, use, ok: aMax <= aLim, ratio, description: aMax <= aLim ? `Aceleração dentro do limite (a/a_lim = ${ratio}).` : `Aceleração acima do limite (a/a_lim = ${ratio}).`, }; } /** Aceleração máxima a_max = 4π²f²·u_max (sec. 9.6.1) */ export function maxAcceleration(freq: number, uMax: number): number { return Number((4 * Math.PI * Math.PI * freq * freq * uMax).toFixed(3)); }