feat(core): rebar common rules (plan C1) and bearing-block bars (plan C2)
- C1: development length l_d = 0.6·d_b·fy/(λ√fck), splice 1.3·l_d, standard hooks (main 90°, tie 90°, stirrup 135° as written in the spec). fck 27 and fy 400/500 are marked as assumed values (I02). - C2: bearing-block bars, one block per bearing (배치 분리). Bars S1 and S2 at @125 with 8 bars per 1200 mm side (7 gaps = 875, ends 162.5), 2500 mm long, coping embedment from the block height (pad included, Q16 결정). - Tests: development and splice lengths; hook table limits; embedment 600 / 550 / 619.1 / 569.1; P1 has 80 bars each of S1 and S2 over 10 blocks. - Not yet: the ③ screen and the drawing check against the bearing-block drawing. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e297db1251
commit
daf78d0586
4 files changed
+189
No files matched your search
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* ③ 철근배근 공통 규칙 (spec §6.2 · plan C1). Lengths in mm, stresses in MPa.
|
||||
* fck and fy are inputs. The defaults below are assumed values and must be shown as such (I02).
|
||||
*/
|
||||
export const MATERIAL_DEFAULTS = {
|
||||
fck: 27,
|
||||
/** H = SD400, S = SD500. */
|
||||
fy: { H: 400, S: 500 } as const,
|
||||
/** 경량 콘크리트 계수 λ (보통 콘크리트 1.0). */
|
||||
lambda: 1.0,
|
||||
/** Marks that these are assumed values (정보 I02). */
|
||||
assumed: true,
|
||||
} as const;
|
||||
|
||||
/** Development length l_d = 0.6·d_b·f_y / (λ·√f_ck) (spec §4 공통 설계 규약, 보정계수 1.0). */
|
||||
export function developmentLength(db: number, fy: number, fck: number, lambda = MATERIAL_DEFAULTS.lambda): number {
|
||||
if (db <= 0 || fy <= 0 || fck <= 0 || lambda <= 0) throw new Error('정착길이 계산 값은 모두 0보다 커야 합니다.');
|
||||
return (0.6 * db * fy) / (lambda * Math.sqrt(fck));
|
||||
}
|
||||
|
||||
/** Lap splice length l_s = 1.3·l_d (spec §4 공통 설계 규약). */
|
||||
export function spliceLength(db: number, fy: number, fck: number, lambda = MATERIAL_DEFAULTS.lambda): number {
|
||||
return 1.3 * developmentLength(db, fy, fck, lambda);
|
||||
}
|
||||
|
||||
export type HookKind = 'main90' | 'tie90' | 'stirrup135';
|
||||
|
||||
/**
|
||||
* Standard hook lengths (KDS 14 20 52, spec §4). Refuses bar sizes outside the table rather than guessing.
|
||||
* - main90: 주철근 90°, D25 이하 15.5 d_b, D29–D35 16.5 d_b
|
||||
* - tie90: 띠철근 90°, D16 이하 8.5 d_b
|
||||
* - stirrup135: 스터럽 135°, 2.5·d_b·(3π/4) + 6·d_b (spec formula, as written)
|
||||
*/
|
||||
export function hookLength(kind: HookKind, db: number): number {
|
||||
if (kind === 'main90') {
|
||||
if (db <= 25) return 15.5 * db;
|
||||
if (db <= 35) return 16.5 * db;
|
||||
throw new Error(`주철근 90° 갈고리 표에 없는 지름입니다 (D${db}).`);
|
||||
}
|
||||
if (kind === 'tie90') {
|
||||
if (db <= 16) return 8.5 * db;
|
||||
throw new Error(`띠철근 90° 갈고리 표에 없는 지름입니다 (D${db}).`);
|
||||
}
|
||||
return 2.5 * db * ((3 * Math.PI) / 4) + 6 * db;
|
||||
}
|
||||
Reference in new issue
Block a user