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
+92
View File
@@ -0,0 +1,92 @@
/**
* Coeficientes aerodinâmicos — NBR 6123:2023, sec. 6.1
*
* Esta é a versão "oficial" que consome as Tabelas 6-12 com
* interpolação bilinear. Substitui `nbr-coefficients.ts` (versão
* provisória com valores hardcoded).
*
* Exposto por módulo:
* - getWallCpeOfficial → Tabela 6 (paredes de planta retangular)
* - getRoofCpeOfficial → Tabela 7 (telhados duas águas)
* - getShedRoofCpe → Tabela 8 (telhado uma água)
* - getValleyRoofCpe → Tabela 9 (calha central)
* - getMultiSpanCpe → Tabela 10 (múltiplos simétricos)
* - getAsymmetricMultiSpan → Tabela 11
* - getMultiSpanVertical → Tabela 12
*/
import { getWallCpeNBR6123 } from './nbr-tables/table-6';
import { getRoofCpeNBR6123 } from './nbr-tables/table-7';
import { getShedRoofCpeNBR6123 } from './nbr-tables/table-8';
import { getValleyRoofCpeNBR6123 } from './nbr-tables/table-9';
import { getMultiSpanSymmetricCpeNBR6123 } from './nbr-tables/table-10';
export interface WallCoefficients {
A: number;
B: number;
C: number;
D: number;
}
export interface RoofCoefficients {
E: number;
F: number;
G: number;
H: number;
I: number;
J: number;
}
/**
* Coeficientes de pressão externa para paredes.
* Mantém compatibilidade com a interface anterior { A, B, C, D }.
*
* Mapeamento das zonas da Tabela 6:
* - α=0°: A=A1B1, B=A2B2, C=C, D=D
* - α=90°: A=A, B=B, C=C1D1, D=C2D2
*/
export function getWallCpeOfficial(
a: number,
b: number,
h: number,
windAngle: 0 | 90 = 0,
): WallCoefficients {
const all = getWallCpeNBR6123(a, b, h);
if (windAngle === 0) {
return {
A: all.alpha0.A1B1,
B: all.alpha0.A2B2,
C: all.alpha0.C,
D: all.alpha0.D,
};
}
return {
A: all.alpha90.A,
B: all.alpha90.B,
C: all.alpha90.C1D1,
D: all.alpha90.C2D2,
};
}
export function getRoofCpeOfficial(
_a: number,
b: number,
h: number,
theta: number,
windAngle: 0 | 90 = 0,
): RoofCoefficients {
return getRoofCpeNBR6123(h, b, theta, windAngle);
}
export function getShedRoofCpe(theta: number, windAngle: 0 | 90 | 180 | 270 = 0) {
// @ts-ignore
return getShedRoofCpeNBR6123(theta, windAngle);
}
export function getValleyRoofCpe(a: number, b: number, h: number, hLine: number) {
return getValleyRoofCpeNBR6123(a, b, h, hLine);
}
export function getMultiSpanCpe(theta: number) {
return getMultiSpanSymmetricCpeNBR6123(theta);
}