feat: unified 0 and 90 degree PDF envelope and category descriptors
This commit is contained in:
@@ -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,06–1,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));
|
||||
}
|
||||
Reference in New Issue
Block a user