fix(B06): 조정 단위를 관 길이 1m로·벽 형상 불변·사면 역전 차단
지적 3건: - 우측(유출) 기슭막이만 좌우로 밀 때 단면이 변했다. 0.1m씩 미니 관 길이 정수의 끝수를 벽 폭이 흡수해 0.45→0.90까지 뚱뚱해졌다. 조정 단위를 **관 길이 1m**로 바꾸고, 조정창으로 옮긴 벽은 폭을 절대 건드리지 않게 했다. 자리만 옮기면 정수 길이가 성립하므로 형상이 그대로다(검증: 두께 0.450 고정, L 1m씩 증감). - 성토 사면이 역전되는 자리가 있었다. 벽 상단이 노견보다 높아지면 사면선이 위로 올라간다 — 최소 성토고 0.3m(FILL_MIN_RISE_M)를 두고 그 앞에서 멈춘다. - 이동이 노견을 넘어 도로 반대편까지 갔다. 벽은 제 노견 바깥에만 서게 막았다. 조정창은 "관 길이 8m · 바깥 2.0m"처럼 관 길이를 같이 적는다. 700줄 유지를 위해 clampWallOffset·cutLength·outletSlopeFactory를 _Solve로 옮겼다. 검증: 이동 ±5m 20케이스 역전 0건·두께 고정, 275.71 유출 이동 11↔7m 정상, 계획고 스윕 24케이스 회귀 문제 0. tsc 통과, pytest 148 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -135,9 +135,9 @@ export function createStationControls(deps: StationControlDeps): StationControls
|
||||
}
|
||||
}
|
||||
|
||||
/** 손으로 미는 범위 한계(m) — 벽이 노면 밑이나 사면 밖으로 달아나지 않게 묶는다. */
|
||||
/** 손으로 미는 범위 한계(m) — 조정 단위가 관 길이 1m이라 ±10m(=관 10m분)까지 둔다. */
|
||||
const clampRevetShift = (value: number): number =>
|
||||
Math.min(Math.max(Math.round(value * 10) / 10, -3), 3);
|
||||
Math.min(Math.max(Math.round(value * 10) / 10, -10), 10);
|
||||
|
||||
const revetOffsetControl: RevetOffsetControl = {
|
||||
shiftFor: (section, role) => revetShifts.get(revetKey(section.chainage_m, role)) ?? 0,
|
||||
|
||||
Reference in New Issue
Block a user