Files
BrainWind/app/src/lib/comfort.ts
T

55 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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,061,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));
}