feat: unified 0 and 90 degree PDF envelope and category descriptors

This commit is contained in:
2026-07-08 19:52:34 +00:00
commit 9fece3f174
170 changed files with 27177 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
/**
* 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.058;
const aLim = Number((0.01 * ka * Math.pow(freq, 1.124)).toFixed(3));
const ratio = Number((aMax / aLim).toFixed(3));
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));
}