fix(B05): 구조물 성토 비탈 Z 반전 — 유출측 실루엣 배열 방향 정규화

사용자 3D 제보: 구조물 자리의 성토가 경사 방향이 뒤집혀 위로 솟는다.

원인은 직전 커밋(b5ceb861)에서 유출측 편거리 정렬을 뺀 것이다. 뒤쪽 코드가 비탈의
도로측 끝점을 **배열 위치**로 집는다 — `slopeRelative`(Corridor_Station)와 코리도
빌더(Corridor_Build)가 `side === "right" ? points.at(-1) : points[0]`로 잡고,
비탈 보간기도 오름차순 배열을 전제한다. 유출이 우측인 측점은 수집 순서(도로 → 바깥)가
편거리 내림차순이라 **바깥 끝을 도로측으로** 잡았고, 그만큼 비탈이 뒤집혀 얹혔다.

정렬로 되돌리면 다단 계단 순서가 다시 깨지므로, 체인은 그대로 두고 **배열 방향만**
오름차순으로 뒤집는다(첫 점이 마지막 점보다 바깥이면 reverse). 점 순서(성토선 >
본 기슭막이 > 추가 성토선 > 추가 기슭막이)는 보존된다.

BUILD_VERSION 18 → 19(저장 코리도 만료).
tsc/prettier 통과, pytest 196 passed(기존 실패 1건 유지).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-24 19:42:07 +09:00
co-authored by Claude Opus 5
parent b5ceb8613a
commit 38fd7e49e0
2 changed files with 8 additions and 1 deletions
+1 -1
View File
@@ -76,7 +76,7 @@ function fnv1a(text: string): string {
* (2026-08-23 사용자 보고: "원복이 안 된 것 같다가 갑자기 반영됨"). 판번호를 해시에
* 섞어 두면 배포와 동시에 저장본이 만료된다.
*/
const BUILD_VERSION = 18; // 조작값 캐시 반영 · 비탈 실루엣 순서 복구(2026-08-24).
const BUILD_VERSION = 19; // 유출측 비탈 배열 방향 정규화 — Z 반전 수정(2026-08-24).
/** 종횡단 정본에서 코리도에 영향을 주는 입력만 요약해 해시 — 갱신 감지 기준. */
export function corridorHash(detail: SectionDetailResponse, routePoints: RoutePoint[]): string {
@@ -410,6 +410,13 @@ export function classifyStation(section: CrossSection): StationPieces | null {
// 범위 밖이라 종전 정렬을 유지한다.
if (side !== outletSide) {
silhouette = [...silhouette].sort((a, b) => a.offset_m - b.offset_m);
} else if (silhouette[0].offset_m > silhouette[silhouette.length - 1].offset_m) {
// 뒤쪽 코드(`slopeRelative`)가 도로측 끝점을 **배열 위치**로 집는다 — 오름차순
// 편거리 배열을 전제한다. 유출이 우측이면 수집 순서(도로 → 바깥)가 내림차순이라
// 바깥 끝을 도로측으로 잡아 **비탈 Z가 뒤집힌다**(2026-08-24 사용자 3D 제보).
// 정렬로 되돌리면 계단 순서가 다시 깨지므로 **뒤집기만** 한다 — 점 순서(체인)는
// 그대로이고 배열 방향만 오름차순이 된다.
silhouette = [...silhouette].reverse();
}
const kind: CorridorKind =
basinCut && side === inletSide ? "cut" : side === "left" ? leftRole : rightRole;