feat(rebar): B11·B12 수평간격을 배수 k 입력으로 (기본 k = 8, 방향은 문서 기준)
- 간격 = k·s: B11은 L 방향 격자(교각축 직각 s), B12는 W 방향 격자(교각축 s). 기본 k = 8 (1000 mm, s = 125) - 개수는 격자 k칸마다, 조립 단 엇갈림 2칸 유지. 3D 철근도 같은 간격 - 기본 k = 8이므로 P1 기본값의 B11·B12 개수가 60 / 47 → 30 / 24로 바뀜 (k = 4이면 문서값 60 / 47을 재현, 테스트로 확인) - 패널에 k 두 칸, 규칙 표시에 B11·B12 간격 (k·s) - FT02를 n·kB11·kB12 정수 검사로 확장 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
48e6811600
commit
0588ffe3f4
9 files changed
+54
-39
No files matched your search
+13
-10
@@ -140,16 +140,17 @@ export function assemblyEndOffset(): number {
|
||||
/** B11 (along W, between the B10-2 levels) and B12 (along L), 4s apart with a 2s stagger per level (§8). */
|
||||
export function assemblyBars(L: number, W: number, H: number, f: FootingRebarSettings = DEFAULT_FOOTING_REBAR): FootingBar[] {
|
||||
const levelsJ = assemblyJs(H, f);
|
||||
const perLevel = (n: number, startOdd: number, startEven: number) =>
|
||||
// Bars every k grid steps (승인 2026-10-26: k·s); the levels alternate a 2-step stagger (엇갈림 2s).
|
||||
const perLevel = (n: number, k: number) =>
|
||||
levelsJ.map((_, idx) => {
|
||||
const i0 = idx % 2 === 0 ? startOdd : startEven;
|
||||
return Math.floor((n - i0) / 4) + 1;
|
||||
const i0 = idx % 2 === 0 ? 0 : 2;
|
||||
return Math.floor((n - i0) / k) + 1;
|
||||
});
|
||||
const nW = grid(W, f, 'sPerp').positions - 1; // 61 (B12 uses the 교각축 직각 value, 승인 2026-10-26)
|
||||
const nL = grid(L, f, 'sPerp').positions - 1; // 79 (B11 along L)
|
||||
// B11 is spread along L (n = 79) and B12 along W (n = 61); each level has its own count.
|
||||
const b11 = perLevel(nL, 0, 2).reduce((a, b) => a + b, 0);
|
||||
const b12 = perLevel(nW, 0, 2).reduce((a, b) => a + b, 0);
|
||||
// B11 is spread along L (교각축 직각 grid) and B12 along W (교각축 grid), per 확대기초철근 (1).md §8.
|
||||
const nW = grid(W, f, 'sAxis').positions - 1;
|
||||
const nL = grid(L, f, 'sPerp').positions - 1;
|
||||
const b11 = perLevel(nL, f.kB11).reduce((a, b) => a + b, 0);
|
||||
const b12 = perLevel(nW, f.kB12).reduce((a, b) => a + b, 0);
|
||||
const hook = Math.round(hookLength('main90', d('S16'))); // 246 mm, rounded as in the document (§8.3)
|
||||
const depth1 = sideDepth(NOMINAL_DIAMETER.S29, NOMINAL_DIAMETER.S19, f);
|
||||
const depth2 = sideDepth(NOMINAL_DIAMETER.S25, NOMINAL_DIAMETER.S19, f);
|
||||
@@ -245,7 +246,8 @@ export function footingRuleValues(H: number, f: FootingRebarSettings = DEFAULT_F
|
||||
b6Leg: number;
|
||||
b9Pitch: number;
|
||||
b9Stagger: number;
|
||||
assemblyPlanPitch: number;
|
||||
b11Pitch: number;
|
||||
b12Pitch: number;
|
||||
assemblyVertical: number;
|
||||
assemblyLevels: number;
|
||||
} {
|
||||
@@ -258,7 +260,8 @@ export function footingRuleValues(H: number, f: FootingRebarSettings = DEFAULT_F
|
||||
b6Leg: z.B5 - z.B68,
|
||||
b9Pitch: 4 * f.sAxis,
|
||||
b9Stagger: 2 * f.sAxis,
|
||||
assemblyPlanPitch: 4 * f.sPerp,
|
||||
b11Pitch: f.kB11 * f.sPerp,
|
||||
b12Pitch: f.kB12 * f.sAxis,
|
||||
assemblyVertical: f.n * f.sV,
|
||||
assemblyLevels: assemblyJs(H, f).length,
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user