fix(B05): 노선 추천 균형 종단을 본 설계 횡단과 맞춤 — 곡선표 확폭 · 비탈 안 닫힘 넓힘 · 암반 경계 · 누가토량 ±500㎥(78)

- 확폭은 노선 곡선표로(후보 · 편집 띠 · [확인]) · 없으면 종전 실측 반경
- 반폭에서 비탈이 안 닫히면 지표면 끝까지 넓힌 샘플로 다시 셈(본 설계 extend_unclosed 와 같은 뜻)
- 암반 경계 기본 오프셋(본 설계 기본 설계와 같음)
- 균형 목표 = 누가토량 끝값(절토 다짐 − 성토) ±500㎥ · 고른 선은 보간 말고 바로 셈해 λ 를 더 좁힘
- 후보 줄 세우기는 보간값 그대로(빠름) · 화면에 낼 선만 바로 셈
- 추천 창 한 줄: 불균형 % → 누가토량 ±㎥

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019EMfGERKUg5nMMNQsyVZ2j
This commit is contained in:
2026-10-07 23:08:43 +09:00
co-authored by Claude Opus 5.5
parent 1c30986a73
commit 0deeb52e9a
9 changed files with 291 additions and 78 deletions
@@ -271,7 +271,7 @@ def generate_initial_route(
outline = build_planned_polyline(expected, min_radius_m=min_radius_m)
return outline, measure(outline, bound=None, follow=True)
def profiled(route: Any) -> None:
def profiled(route: Any, exact: bool = True) -> None:
if route is not None:
attach_profile(
route[1],
@@ -279,6 +279,8 @@ def generate_initial_route(
terrain,
max_grade=max_grade,
design_speed=design_speed,
design_curves=[curve.as_dict() for curve in route[0].curves],
exact=exact,
)
bound = None
@@ -311,7 +313,7 @@ def generate_initial_route(
else:
if with_profile:
for route in [*pool.candidates, pool.follow]:
profiled(route)
profiled(route, exact=False) # 줄 세우기 — 고른 하나만 아래에서 바로 셈
outline, metrics = pick(target, pool.candidates, with_profile)
if with_profile:
profiled((outline, metrics))