From 8daadf2d4f1a3393029d135ff1965d36250dbf93 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 3 Sep 2026 07:19:32 +0900 Subject: [PATCH] =?UTF-8?q?fix(B06):=20I=ED=98=95=20=EC=A7=91=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=B0=EA=B4=80=20=EB=81=9D=EB=8B=A8=EC=9D=B4=20?= =?UTF-8?q?=EB=A7=88=EA=B0=90=EB=A9=B4=EC=97=90=20=EC=A0=91=ED=98=80=20?= =?UTF-8?q?=EC=82=BC=EA=B0=81=ED=98=95=EC=9D=B4=20=EB=90=98=EB=8D=98=20?= =?UTF-8?q?=EA=B2=B0=ED=95=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 관 끝단 두 꼭짓점을 마감면(I형 벽 안쪽 변) 선분 안으로 자를 때, 원지반이 벽 상단 위라 관 시작점이 벽 상단에 붙으면 위·아래 교점이 같은 끝점으로 접혀 관 단면이 삼각형으로 그려짐. 비스듬히 자른 끝단 길이는 항상 관경 이상이므로, 그보다 짧으면 접힌 것으로 보고 축 직각 마감으로 되돌림. 검증 — 공용 브라우저 B06 단면 8개 실측: 유입측 끝단 길이 0.0px → 18.7~58.4px. Co-Authored-By: Claude Opus 5 (1M context) --- B06_Section/B06_Section_UI_Cross_Culvert_Solve.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Solve.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Solve.ts index 6ebc313a..500d1d40 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Solve.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Solve.ts @@ -561,7 +561,17 @@ export function pipeAxisSolver( Math.hypot(top.offset - fallback.top.offset, top.elevation - fallback.top.elevation) > STRAY_LIMIT_M; if (strayed) return fallback; - return { bottom: clampToFace(bottom, face), top: clampToFace(top, face) }; + const cutBottom = clampToFace(bottom, face); + const cutTop = clampToFace(top, face); + // 마감면을 비스듬히 자르면 끝단 길이는 관경 이상이다. 그보다 짧으면 선분 밖으로 + // 나간 교점이 한 끝점으로 접힌 것 — I형 벽이 원지반에 묻혀 관 시작점이 벽 상단에 + // 붙으면 두 꼭짓점이 한 점이 되어 관이 삼각형으로 그려진다. 그럴 땐 축 직각 마감으로. + const cutSpan = Math.hypot( + cutTop.offset - cutBottom.offset, + cutTop.elevation - cutBottom.elevation, + ); + if (cutSpan < diameter - 1e-6) return fallback; + return { bottom: cutBottom, top: cutTop }; }; solver.derive(); return solver;