fix(B06): 세월교 관 끝 꼭짓점 = 그 높이 흙막이 전면 · 3D 도 같은 자리 함수(89-1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
This commit is contained in:
2026-10-08 12:01:35 +09:00
co-authored by Claude Opus 5.5
parent e25b9ddf2f
commit 93fe8876c6
4 changed files with 44 additions and 20 deletions
+9
View File
@@ -65,6 +65,8 @@ function pipeFit(edit) {
const { ford, culvert } = computeStoredLayouts(section, list);
const [right, left] = ford.pipe.outer.slice(2);
const ends = { 1: left.offset, [-1]: right.offset };
const [topLeft, topRight] = ford.pipe.outer;
const tops = { 1: topLeft, [-1]: topRight };
const slab = ford.slabBridge.map((p) => p.offset);
const slabEnd = { 1: Math.max(...slab), [-1]: Math.min(...slab) };
return {
@@ -80,6 +82,13 @@ function pipeFit(edit) {
role: side.role,
guard: true,
pipeGap: r3(ends[side.outward] - front),
// 관 윗모서리 ↔ 그 높이의 흙막이 전면(사면 이용 · 89-1)
topGap: r3(
tops[side.outward].offset -
(wall.points[2].offset +
wall.outward * wall.lean * (wall.topJoint.elevation - tops[side.outward].elevation)),
),
lean: wall.lean,
slabGap: r3(slabEnd[side.outward] - wall.bottomBack.offset),
};
}),
+11
View File
@@ -47,6 +47,17 @@ def test_관은_흙막이_전면까지_바닥판은_배면까지(fit: dict) -> N
assert side["slabGap"] == pytest.approx(0, abs=1e-3)
def test_관_윗모서리도_흙막이_전면_사면에(fit: dict) -> None:
"""89-1 — 흙막이 사면 이용: 윗모서리가 그 높이 전면 자리라 벽 밖으로 안 튀어나감."""
leaned = 0
for case in (fit[k] for k in ("both", "inletPlus1", "outletPlus2", "inletOnly")):
for side in case["sides"]:
if side["guard"]:
assert side["topGap"] == pytest.approx(0, abs=1e-3)
leaned += side["lean"] > 0
assert leaned
def test_흙막이를_옮기면_관이_그만큼_따라감(fit: dict) -> None:
base = fit["both"]["lengthM"]
assert fit["inletPlus1"]["lengthM"] == pytest.approx(base + 1, abs=1e-3)