/** * ③ 철근배근 공통 규칙 (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; }