diff --git a/src/core/rebar/coping-main.ts b/src/core/rebar/coping-main.ts index 1efd6f8..71c45be 100644 --- a/src/core/rebar/coping-main.ts +++ b/src/core/rebar/coping-main.ts @@ -11,8 +11,8 @@ export const MAIN = { /** 기본 간격 s_m and minimum end gap g_min. */ spacing: 125, endGapMin: 80, - /** 상면 단 가로 간격 = 2d (H29, mm). Fixed; the vertical step is the 상면 주철근 단 간격 input. */ - layHorizontal: 2 * NOMINAL_DIAMETER.H29, + /** 상면 단 가로 간격 = d (H29, mm). Fixed; the vertical step is the 상면 주철근 단 간격 input. */ + layHorizontal: NOMINAL_DIAMETER.H29, /** 90° 갈고리 l_h (mm, as in the document). */ hook: 472, /** 하면 경사 구간 수평 길이 (mm, each side) and Level width. */ diff --git a/src/core/rebar/coping-settings.ts b/src/core/rebar/coping-settings.ts index 5201a1f..7f2f529 100644 --- a/src/core/rebar/coping-settings.ts +++ b/src/core/rebar/coping-settings.ts @@ -9,7 +9,7 @@ export interface CopingRebarSettings { mainSpacing: number; /** 주철근 끝단 최소 여유 (mm). */ mainEndGap: number; - /** 상면 주철근 단 간격 · 세로 (mm). The horizontal step is fixed at 2d (H29, 57.2 mm). */ + /** 상면 주철근 단 간격 · 세로 (mm). The horizontal step is fixed at d (H29, 28.6 mm). */ mainLayerGap: number; /** 첫 전단철근 최소 여유 (피복 다음, mm). */ firstShearGap: number; diff --git a/src/main.ts b/src/main.ts index e199ecc..5210972 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1079,7 +1079,7 @@ const COPING_REBAR_FIELDS: { key: keyof CopingRebarSettings; label: string }[] = { key: 'cover', label: '피복 (철근 중심, mm)' }, { key: 'mainSpacing', label: '주철근 기본간격 (mm)' }, { key: 'mainEndGap', label: '주철근 끝단 최소 여유 (mm)' }, - { key: 'mainLayerGap', label: '상면 주철근 단 간격 · 세로 (mm, 가로는 2d 고정)' }, + { key: 'mainLayerGap', label: '상면 주철근 단 간격 · 세로 (mm, 가로는 d 고정)' }, { key: 'firstShearGap', label: '첫 전단철근 최소 여유 (피복 다음, mm)' }, { key: 'shearLegs', label: '전단철근 다리 수' }, { key: 'spacingS', label: '전단철근 간격 · 경사 (mm)' }, diff --git a/src/view/rebar3d.ts b/src/view/rebar3d.ts index 1927475..1cbe427 100644 --- a/src/view/rebar3d.ts +++ b/src/view/rebar3d.ts @@ -146,7 +146,7 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL, const cover = 0.1; // Top rows C1–C6 (코핑철근.md §5.1, §5.3): counted from the left, the even (1-based) positions are cycle 1 (C1–C3), // the odd cycle 2 (C4–C6). In 0-based j that is odd j → cycle 1. Each row turns down 472 at both ends, and the - // k-th row's ends sit (k − 1)·57.2 further in. + // k-th row's ends sit (k − 1)·d (H29, 28.6) further in. const topEl = m.copingRefTop; const hookTop = MAIN.hook / 1000; for (let k = 1; k <= 3; k++) { diff --git a/tests/rebar-coping-main.test.ts b/tests/rebar-coping-main.test.ts index 650bb93..d36d9b2 100644 --- a/tests/rebar-coping-main.test.ts +++ b/tests/rebar-coping-main.test.ts @@ -25,10 +25,10 @@ describe('C1–C8 상·하면 주철근 (코핑철근.md §5, plan C3)', () => { expect(topRowEl(43.284, 3)).toBe(43.084); }); - it('top bar lengths 12744 / 12629.6 / 12515.2 (path + 2 × 472 hook)', () => { + it('top bar lengths 12744 / 12686.8 / 12629.6 (path + 2 × 472 hook, 가로 단 간격 d = 28.6)', () => { expect(topBarLength(12000, 1)).toBeCloseTo(12744, 0); - expect(topBarLength(12000, 2)).toBeCloseTo(12629.6, 0); - expect(topBarLength(12000, 3)).toBeCloseTo(12515.2, 0); + expect(topBarLength(12000, 2)).toBeCloseTo(12686.8, 1); + expect(topBarLength(12000, 3)).toBeCloseTo(12629.6, 1); }); it('bottom piece ≈ 7448 with l_s = 1717.6 (1.3 × l_d of H29 at fck 27) — the document shows 1717', () => {