knowledge(요구): 분석 773 — 평면계획선 예정노선 맞춤 · 차이 주범 = 합치기 · 측점 맞춤 · 갈래 9 시험 · 권함 M(교각점 · R 맞춤 + 측점 벌점)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015uTVHFZkNcUa1SR4cNcENM
This commit is contained in:
2026-11-03 20:26:06 +09:00
co-authored by Claude Opus 5.5
parent ea6207d587
commit 9ab3ae5035
6 changed files with 200 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,200 @@
# 773-1 예정노선 수정 뒤 평면계획선 — 차이 실측 · 갈래 시험 · 권함 (요구 615 · 조사)
검증_sub1(7a20fd27…) 라이다 설계 지형 · 최소 R 12 m · 예정노선 1,377 m 위에서 수정 꼴 여덟을 메모리로 만들어 시험. 앱 코드 · 저장 파일 손대지 않음.
## 결론 다섯 줄
1. 지금 차이의 주범 = **같은 쪽 합치기(④)** 와 **측점 맞춤(⑤)** 두 단계 — 합치기가 「V 꼴 꺾임 둘」을 바깥 직선 교점 하나의 큰 곡선으로 바꿔 최대 차 4.5 → 20 m · 측점 맞춤이 교각점을 밀고 곡선을 **더 합쳐** 평균 차 2.1 → 3.8 m(곧게 편 꼴은 끝 구간에 큰 고리가 생겨 78 m).
2. 측점 맞춤이 곡선 수도 바꿈 — 여덟 꼴 모두 합친 뒤 곡선 수에서 1~5 개 더 줄음(「R 개수 유지」가 지금은 안 지켜짐).
3. 교각점을 고정하고 **R 만으로 측점 맞추기는 불가** — 완만한 곡선은 R 을 바꿔도 MC 가 거의 안 움직임(측점 어김 151/165).
4. 권함 = **갈래 M** — 합친 뒤 곡선 수를 틀로 두고 교각점 · R 를 예정노선에 최소제곱으로 맞추되 「MC = 20 m 측점」 · 「R ≥ 최소 R」 벌점을 단계적으로 키움(1 → 1000). 여덟 꼴 평균 **최대 차 26.5 → 7.3 m · 평균 3.80 → 1.48 m** · 곡선 수 8/8 유지 · 측점 어김 0 · R 미달 0 · 계류 0 · 복도 밖 0 · 횡단 토공 −1.2 % · 2.5~5.6 초(지금 1~2.8 초).
5. 남는 흠 = 벌점 수렴이 드물게 측점 하나를 못 맞출 수 있음(갈래 N 에서 1 건) → 끝에 측점 확인 · 못 맞추면 지금 측점 맞춤으로 물러나는 안전판 필수. 사용자 물음 = 「R 개수」 기준(아래 2 장).
## 1. 지금 차이 실측
수정 꼴(메모리 · 화면 긋기 흉내 · 고친 구간 = 닿은 노드 사이 갈음 771):
| 꼴 | 고친 것 |
|---|---|
| M0 수정 없음 | 받은 예정노선 그대로(기준) |
| M1 작은 꺾임 | 360~440 m 를 옆 8 m 점 하나로 그은 두 직선 |
| M2 크게 돌아감 | 550~800 m 를 옆 30 · 40 · 30 m 점 셋으로 |
| M3 중간 노드 갈음(771) | 200~330 m 를 옆 12 · 18 · 15 · 8 m 점 넷으로 |
| M4 짧은 지그재그 | 950~1050 m 를 ±6 m 점 넷(20 m 간격) |
| M5 곧게 펴기 | 1100~1300 m 를 곧은 선 하나로 |
| M6 꼭짓점 끌기 | 700 m 꼭짓점 하나를 옆 15 m(769-2 꼴) |
| M7 전체 다시 긋기 | 노선 전체를 60 m 마다 점(±3 m 흔들림)으로 다시 그음 |
잣대 — 차 = 평면계획선 ↔ 고친 예정노선 거리(계획선 1 m 마다 · 최대는 양방향) · 고친 구간 = 고친 자리 앞뒤 · 측점 어김 = MC 가 20 m 측점 밖(±5 cm) · 같은 측점 둘 · 앞 MC 와 20 m 안.
### 표 1 지금 길 — 수정 꼴별 최종 차이
| 수정 꼴 | 곡선 수 | 차 최대 m | 평균 m | 95 % m | 고친 구간 최대 m | 그 밖 최대 m | R 최소 / 가운데 / 최대 m | 측점 어김 | 시간 s |
|---|---|---|---|---|---|---|---|---|---|
| M0 수정 없음 | 19 | 13.37 | 2.95 | 9.17 | - | - | 12.0 / 40.9 / 123.3 | 0 | 2.49 |
| M1 작은 꺾임(8 m) | 16 | 13.37 | 2.88 | 9.71 | 11.82 | 13.37 | 12.0 / 36.8 / 123.3 | 0 | 1.37 |
| M2 크게 돌아감(40 m) | 16 | 24.37 | 2.55 | 8.03 | 4.75 | 24.37 | 12.0 / 35.3 / 122.9 | 0 | 1.15 |
| M3 중간 노드 갈음(771) | 20 | 28.97 | 3.6 | 12.41 | 9.53 | 28.97 | 12.0 / 47.9 / 168.1 | 0 | 2.27 |
| M4 짧은 지그재그 | 20 | 14.89 | 2.91 | 9.47 | 7.08 | 14.89 | 12.0 / 36.8 / 307.4 | 0 | 2.73 |
| M5 곧게 펴기 | 17 | 77.83 | 9.55 | 61.38 | 77.83 | 10.98 | 12.0 / 36.9 / 122.9 | 0 | 2.47 |
| M6 꼭짓점 끌기(15 m) | 21 | 13.42 | 2.77 | 7.97 | 8.3 | 13.42 | 12.0 / 40.9 / 280.6 | 0 | 1.56 |
| M7 전체 다시 긋기(60 m 점) | 14 | 25.47 | 3.2 | 12.91 | 25.47 | 0.0 | 12.0 / 33.4 / 1303.6 | 0 | 0.92 |
### 표 2 지금 길 — 단계마다 차이(곡선 수 · 최대 / 평균 m · 측점 밖 곡선)
| 수정 꼴 | ① 꺾임점·묶기 | ② 큰 R | ③ 꺾임만→곡선 | ④ 같은 쪽 합치기 | ⑤ 측점 맞춤 |
|---|---|---|---|---|---|
| M0 수정 없음 | 32 · 3.51 / 0.92 · 31 | 32 · 7.08 / 1.24 · 31 | 32 · 7.08 / 1.24 · 31 | 22 · 19.93 / 2.02 · 21 | 19 · 13.37 / 2.95 · 0 |
| M1 작은 꺾임(8 m) | 27 · 3.64 / 1.01 · 27 | 27 · 7.08 / 1.31 · 26 | 27 · 7.08 / 1.31 · 26 | 17 · 19.93 / 2.46 · 17 | 16 · 13.37 / 2.88 · 0 |
| M2 크게 돌아감(40 m) | 28 · 3.84 / 0.8 · 28 | 28 · 7.08 / 1.13 · 27 | 28 · 7.08 / 1.13 · 27 | 19 · 19.93 / 1.97 · 19 | 16 · 24.37 / 2.55 · 0 |
| M3 중간 노드 갈음(771) | 30 · 3.41 / 0.93 · 30 | 30 · 7.08 / 1.39 · 29 | 30 · 7.08 / 1.39 · 29 | 21 · 19.93 / 2.17 · 21 | 20 · 28.97 / 3.6 · 0 |
| M4 짧은 지그재그 | 35 · 3.65 / 0.93 · 35 | 35 · 7.06 / 1.25 · 34 | 35 · 7.06 / 1.25 · 34 | 24 · 19.93 / 2.11 · 23 | 20 · 14.89 / 2.91 · 0 |
| M5 곧게 펴기 | 28 · 5.49 / 0.99 · 28 | 28 · 16.44 / 1.55 · 27 | 28 · 16.44 / 1.55 · 27 | 21 · 16.44 / 1.5 · 20 | 17 · 77.83 / 9.55 · 0 |
| M6 꼭짓점 끌기(15 m) | 35 · 6.27 / 0.87 · 35 | 35 · 7.07 / 1.21 · 34 | 35 · 7.07 / 1.21 · 34 | 26 · 19.93 / 2.0 · 26 | 21 · 13.42 / 2.77 · 0 |
| M7 전체 다시 긋기(60 m 점) | 22 · 6.12 / 0.06 · 22 | 22 · 11.94 / 0.94 · 22 | 22 · 11.94 / 0.94 · 22 | 15 · 26.19 / 2.4 · 15 | 14 · 25.47 / 3.2 · 0 |
| **여덟 꼴 평균** | 4.5 / 0.81 | 8.9 / 1.25 | 8.9 / 1.25 | 20.3 / 2.08 | 26.5 / 3.80 |
단계 해석(표 2):
- ① 꺾임점 · 묶기 = 예정노선에 붙음(평균 0.8 m · 최대 4.5 m) · 곡선 22~35 개.
- ② 큰 R = 최대 4.5 → 8.9 m(직접 잼 안 가장 큰 R · 곡선 수 그대로).
- ④ 같은 쪽 합치기 = 곡선 7~11 개 줄며 **최대 20 m** — 일곱 꼴이 같은 자리(누가거리 1,230 m 안팎 V 꼴 굽이)에서 19.9 m(그림 `fig_stages_M0_4_merge_worst.png`). 합친 곡선 교각점 = 바깥 두 직선 교점이라 굽이 안쪽을 크게 비켜 감.
- ⑤ 측점 맞춤 = 측점 어김은 0 이지만 교각점을 들어오는 접선 따라 최대 20 m 밀고, 못 놓으면 뒤 꺾임을 **더 합침**(직접 잼만 보고 예정노선 거리 한도 없음) → 평균 2.1 → 3.8 m · 곡선 1~5 개 더 줄음. 가장 벌어진 자리도 대개 그 1,230 m 굽이 — **고친 곳 밖**(표 1 「그 밖 최대」 M2 24.4 · M3 29.0 m): 한 곳을 고쳐도 측점이 밀려 먼 곡선의 놓기가 바뀜. 곧게 편 꼴(M5)은 끝 두 꺾임을 합쳐 78 m 고리(`fig_M5_all.png` 빨강).
## 2. 평면계획선이 지키는 제약(코드 · 근거)
| 제약 | 값(검증_sub1) | 어디서 | 근거 |
|---|---|---|---|
| 최소 곡선반지름(중심선) | 12 m(설계속도 20 · 특수지형) · 미달은 막지 않고 위반 표시 | `common_util_route_polyline.build_planned_polyline` · `..._Router_Replan._plan_criteria` | 지식DB `01_임도/02_상세설계/평면선형.md` §1(별표2 Ⅰ.2.다) — 40: 60/40 · 30: 30/20 · 20: 15/12 |
| 배향곡선 하한 | 10 m(위반 표시) | 같은 함수 | 평면선형.md §2 |
| 내각 155° 이상 곡선 생략 | 안 씀 — 꺾이는 자리는 늘 곡선(9-07 사용자) | 같은 파일 `STRAIGHT_INNER_ANGLE_DEG` | 평면선형.md §1(「설치하지 않을 수 있음」) |
| 접선 자리 | 곡선 접선 ≤ 앞뒤 직선 절반(넘으면 R 줄임) — 곡선 사이 직선 길이 하한은 없음(0 까지) | `build_planned_polyline` | 코드 규칙(법정 값 없음) |
| 곡선 길이 하한 | 0(자리만 · 법령 · 교본 값 없음) | `Engine_Grade.plan_curve_length_limit_m` | 9-12 사용자 확정 |
| **곡선 MC = 20 m 일반측점(스냅 · 절대)** | MC 가 측점 ±5 cm · 서로 다른 측점 · 앞 MC 와 20 m 이상 | `..._Station` | 사용자 규칙(요구 235-3 · 241-13) — 지식DB 근거 없음(원전은 MC = 보조측점) |
| 직접 잼(Guard) | 탐색 복도 100 m 안 · 계류 버퍼(100 m) 안 나란히 안 늘어남 · 토공 가늠 +5 % + 5 ㎥ 안 — 같은 자리 옛 선 대비 | `..._Merge.Guard` | 코드 규칙(406 · 419) |
| 합치기 멈춤 | 못 지킨 곳 수(R · 계류) 안 늘어남 · 횡단 토공 +10 % 안 | `..._Merge.merge_same_side` | 코드 규칙(요구 254) |
| 계류 이격 | 버퍼 안 구간이 건너기 봐줌 길이 넘으면 위반 | `..._Metrics.route_metrics` | 코드 규칙 |
| 종단 기울기(원지반) | 14 %(법정 상한) — **참고만**(막지 않음 · 419) · 측점 맞춤 자리 순위에만(606-2) | `Metrics` · `Station._found` | 지식DB 종단선형.md(법정 상한) |
| 지표면 · 격자 밖 | 복도 판정에 포함(격자 밖 = 복도 밖) | `Guard._look` | — |
「R 개수 유지」 뜻 — **제안: 같은 쪽 합치기(④) 뒤 곡선 수**(= 토공 최소 곡선 수 · 758 사용자 뜻) · 측점 맞춤 · 다듬기는 이 수를 바꾸지 않음. 다른 뜻 가능성: 「예정노선 수정 **전** 평면계획선의 곡선 수」(예: 769-2 저장선 22 개) — 고친 자리에 굽이가 새로 생기거나 없어져도 수를 묶음 → 그 뜻이면 틀(어느 굽이에 곡선을 둘지)을 새로 정하는 일이 더 붙음.
## 3. 갈래 시험
모든 갈래 = 지금 길 ①~④(꺾임점 · 큰 R · 꺾임만 → 곡선 · 같은 쪽 합치기)까지 같음 · 그 뒤만 다름.
| 갈래 | 하는 일 | 브레인 예시 대응 |
|---|---|---|
| A 지금 길 | ⑤ 지금 측점 맞춤(합치기 · 교각점 밀기 · 직접 잼) | 기준 |
| B | ⑤ 측점 맞춤에서 뒤 꺾임 합치기만 막음(곡선 수 유지) | (다) 가장 작은 고침 |
| C | ④ 합치기에 「합친 곡선 ↔ 예정노선 8 m 안」 한도 + B | (라) |
| D0 | 교각점 · R 를 예정노선에 최소제곱으로 맞춤 → 교각점 고정 · **R 만** 바꿔 MC = 측점 | (가) |
| D | 같은 맞춤 → 지금 측점 맞춤(합치기 막음) | (다) 맞춤 단계 하나 더 |
| L | 맞춤 → 가까운 측점 고름 → 「이웃 MC 사이 = 측점 사이」 벌점을 1 → 10 → 100 → 1000 으로 키우며 다시 맞춤(scipy `least_squares` · 이웃 곡선만 움직이는 성긴 셈) | (나) |
| L5 | L + 접선이 직선 절반에서 5 m 여유 남김 벌점 | (나) 변형 |
| **M** | L + 「R ≥ 최소 R」 벌점도 측점 벌점과 함께 키움 | (나) **권함** |
| N | M 을 지금 길 **끝** 곡선 수(측점 맞춤 합치기 뒤 · 더 적음)로 | 곡선 수 기준 비교 |
그 밖에 해 보고 뺀 것: 곡선마다 차례로 교각점 밀기 + R 후보 고르기(E · F · G · I · J — 앞 곡선이 직선 절반을 다 써서 뒤 곡선을 측점에 못 놓는 일이 남아 측점 어김 1~2 · 앞 곡선 R 줄이는 되돌림을 넣어도 2) · 전체 촘촘한 셈(E · H — 같은 결과에 40~75 초).
### 표 3 갈래 × 수정 꼴 — 차 최대 / 평균 m (곡선 수 · 측점 어김)
| 갈래 | M0 | M1 | M2 | M3 | M4 | M5 | M6 | M7 | 평균 최대 / 평균 |
|---|---|---|---|---|---|---|---|---|---|
| A 지금 길 | 13.37 / 2.95 (19 · 0) | 13.37 / 2.88 (16 · 0) | 24.37 / 2.55 (16 · 0) | 28.97 / 3.6 (20 · 0) | 14.89 / 2.91 (20 · 0) | 77.83 / 9.55 (17 · 0) | 13.42 / 2.77 (21 · 0) | 25.47 / 3.2 (14 · 0) | **26.5 / 3.80** |
| B 측점 맞춤에서 합치기 막음 | 13.5 / 2.79 (22 · 0) | 15.55 / 3.21 (17 · 0) | 24.44 / 2.66 (19 · 0) | 13.4 / 3.39 (21 · 0) | 14.93 / 2.63 (24 · 0) | 9.13 / 2.64 (21 · 0) | 29.07 / 3.72 (25 · 0) | 24.43 / 2.52 (15 · 0) | **18.1 / 2.95** |
| C 합치기 거리 한도 8 m + B | 11.19 / 2.53 (24 · 0) | 11.1 / 2.55 (21 · 0) | 9.17 / 1.84 (21 · 0) | 11.11 / 3.13 (23 · 0) | 12.24 / 2.34 (26 · 0) | 9.13 / 2.64 (21 · 0) | 17.95 / 2.5 (27 · 0) | 11.77 / 2.07 (18 · 0) | **11.7 / 2.45** |
| D0 교각점 맞춤 · R 만으로 측점 | 7.46 / 0.96 (22 · 20) | 5.98 / 1.16 (17 · 15) | 5.49 / 1.03 (19 · 17) | 4.58 / 0.94 (21 · 20) | 5.52 / 1.08 (24 · 22) | 7.62 / 1.04 (21 · 18) | 8.06 / 1.04 (26 · 25) | 11.48 / 1.26 (15 · 14) | **7.0 / 1.06** |
| D 교각점 · R 맞춤 → 지금 측점 맞춤 | 9.39 / 2.18 (22 · 0) | 13.6 / 2.78 (17 · 0) | 11.09 / 2.51 (19 · 0) | 12.08 / 2.56 (21 · 0) | 16.48 / 2.52 (24 · 0) | 11.48 / 2.29 (21 · 0) | 10.88 / 2.48 (26 · 0) | 16.27 / 2.77 (15 · 0) | **12.7 / 2.51** |
| L 교각점 · R 맞춤 + 측점 벌점 | 5.69 / 1.48 (22 · 0) | 6.19 / 1.6 (17 · 0) | 6.07 / 1.37 (19 · 0) | 8.72 / 1.52 (21 · 0) | 6.77 / 1.4 (24 · 0) | 9.28 / 1.55 (21 · 0) | 8.22 / 1.19 (26 · 0) | 6.56 / 1.51 (15 · 0) | **7.2 / 1.45** |
| L5 = L + 접선 여유 5 m | 5.25 / 1.4 (22 · 2) | 6.37 / 1.59 (17 · 0) | 5.83 / 1.45 (19 · 0) | 4.96 / 1.5 (21 · 0) | 7.51 / 1.54 (24 · 0) | 8.58 / 1.66 (21 · 0) | 8.1 / 1.24 (26 · 0) | 7.14 / 1.61 (15 · 0) | **6.7 / 1.50** |
| M = L + 최소 R 벌점도 키움(권함) | 5.79 / 1.48 (22 · 0) | 6.3 / 1.58 (17 · 0) | 5.42 / 1.21 (19 · 0) | 8.7 / 1.52 (21 · 0) | 7.2 / 1.4 (24 · 0) | 9.33 / 1.54 (21 · 0) | 9.09 / 1.57 (26 · 0) | 6.59 / 1.5 (15 · 0) | **7.3 / 1.48** |
| N = M 을 지금 길 끝 곡선 수로 | 6.23 / 1.48 (19 · 1) | 7.57 / 1.62 (16 · 0) | 6.84 / 1.73 (16 · 0) | 9.38 / 1.62 (20 · 0) | 7.4 / 1.31 (20 · 0) | 15.55 / 3.4 (17 · 0) | 8.46 / 1.34 (21 · 0) | 7.41 / 1.71 (14 · 0) | **8.6 / 1.78** |
### 표 4 갈래 — 제약 · 곡선 수 유지 · 토공 · 시간(여덟 꼴 합 · 평균)
| 갈래 | 곡선 수 유지(합친 뒤 = 끝) | 측점 어김 합 | R 미달 합 | 계류 어김 합 | 잼 못 지남(곡선 조각) 합 | 복도 밖 합 | 횡단 토공(지금 길 대비) | 시간 평균 s | 최대 s |
|---|---|---|---|---|---|---|---|---|---|
| A 지금 길 | 0/8 | 0 | 0 | 0 | 28 | 0 | +0.0 % | 2.0 | 2.8 |
| B 측점 맞춤에서 합치기 막음 | 7/8 | 0 | 1 | 0 | 23 | 0 | -1.8 % | 1.4 | 1.6 |
| C 합치기 거리 한도 8 m + B | 7/8 | 0 | 1 | 0 | 26 | 0 | -4.8 % | 1.2 | 1.5 |
| D0 교각점 맞춤 · R 만으로 측점 | 8/8 | 151 | 1 | 0 | 19 | 0 | +4.4 % | 3.0 | 3.8 |
| D 교각점 · R 맞춤 → 지금 측점 맞춤 | 8/8 | 0 | 1 | 0 | 18 | 0 | +0.2 % | 1.8 | 2.3 |
| L 교각점 · R 맞춤 + 측점 벌점 | 8/8 | 0 | 8 | 0 | 38 | 0 | +2.3 % | 2.9 | 4.1 |
| L5 = L + 접선 여유 5 m | 8/8 | 2 | 2 | 0 | 50 | 0 | -2.8 % | 2.6 | 3.0 |
| M = L + 최소 R 벌점도 키움(권함) | 8/8 | 0 | 0 | 0 | 40 | 0 | -1.2 % | 3.2 | 5.6 |
| N = M 을 지금 길 끝 곡선 수로 | 8/8 | 1 | 0 | 0 | 42 | 0 | -2.7 % | 3.5 | 4.3 |
### 표 5 수정 꼴별 — 지금 길(A) 대 권함(M)
| 수정 꼴 | 곡선 수 A → M | 최대 A → M | 평균 A → M | 95 % A → M | 고친 구간 최대 A → M | 토공 M/A | 시간 A → M s |
|---|---|---|---|---|---|---|---|
| M0 수정 없음 | 19 → 22 | 13.37 → 5.79 | 2.95 → 1.48 | 9.17 → 3.68 | None → None | -2.0 % | 2.62 → 3.16 |
| M1 작은 꺾임(8 m) | 16 → 17 | 13.37 → 6.3 | 2.88 → 1.58 | 9.71 → 4.09 | 11.82 → 6.3 | -0.5 % | 1.41 → 2.9 |
| M2 크게 돌아감(40 m) | 16 → 19 | 24.37 → 5.42 | 2.55 → 1.21 | 8.03 → 3.26 | 4.75 → 4.04 | -0.7 % | 1.48 → 2.47 |
| M3 중간 노드 갈음(771) | 20 → 21 | 28.97 → 8.7 | 3.6 → 1.52 | 12.41 → 3.97 | 9.53 → 4.27 | -1.0 % | 2.82 → 2.81 |
| M4 짧은 지그재그 | 20 → 24 | 14.89 → 7.2 | 2.91 → 1.4 | 9.47 → 3.6 | 7.08 → 4.67 | +5.2 % | 2.77 → 2.62 |
| M5 곧게 펴기 | 17 → 21 | 77.83 → 9.33 | 9.55 → 1.54 | 61.38 → 3.86 | 77.83 → 9.33 | -7.3 % | 2.57 → 2.78 |
| M6 꼭짓점 끌기(15 m) | 21 → 26 | 13.42 → 9.09 | 2.77 → 1.57 | 7.97 → 4.5 | 8.3 → 8.62 | +7.3 % | 1.6 → 2.92 |
| M7 전체 다시 긋기(60 m 점) | 14 → 15 | 25.47 → 6.59 | 3.2 → 1.5 | 12.91 → 3.82 | 25.47 → 6.59 | -12.0 % | 1.07 → 5.56 |
표 읽기:
- B · C(지금 길을 조금 고침) = 곡선 수는 거의 지키나 차이는 평균 3.0 · 2.5 m 에 머묾 — 지금 측점 맞춤 자체가 교각점을 예정노선과 무관하게 밀기 때문 · 둘 다 M6 에서 R 1.7 m 곡선(합치기를 막으면 지금 측점 맞춤이 R 을 최소 아래로 줄임).
- D0 = 맞춤만이면 평균 1.06 m 로 가장 가깝지만 측점 어김 151 — 교각점 고정이면 R 을 바꿔도 MC 가 「R × (tan(I/2) − I/2)」 만큼만 움직여 완만한 곡선은 몇 cm 밖에 못 옮김.
- D = 맞춘 뒤 지금 측점 맞춤을 붙이면 맞춘 것이 다시 흐트러짐(평균 1.06 → 2.51 m).
- L · M = 측점 등식을 맞춤 안에 넣어 교각점 · R 가 함께 움직임 → 차이 평균 1.5 m · 최대 7 m 대 · 측점 어김 0. L 은 최소 R 벌점이 약해 R 10.7~11.8 m 곡선 8 개 → M 에서 0.
- 「잼 못 지남」 = 곡선 조각을 **고친 예정노선 같은 자리**와 견준 직접 잼(토공 가늠 +5 % 등) — 참고 잣대 · M 40 대 지금 길 28(예정노선에 더 붙어 손 긋기 꺾임의 토공 가늠과 더 자주 견줌) · 노선 전체 횡단 토공은 M −1.2 %.
- 곡선 수: M = 합친 뒤 수 그대로(지금 길 끝보다 0~5 개 많음 · 지금 길은 측점 맞춤이 더 합침). N(지금 길 끝 수) = 평균 1.78 m 로 조금 멀고 M5 에서 3.4 m(틀이 이미 크게 벗어난 고리) · 측점 어김 1(벌점 수렴 실패 → 안전판 필요의 근거).
그림:
| 그림 | 보이는 것 |
|---|---|
| `fig_stages_M0_all.png` · `fig_stages_M0_4_merge_worst.png` | 지금 길 단계 — ④ 합치기가 1,230 m V 꼴 굽이를 바깥으로 크게 감쌈 |
| `fig_stages_M3_5_snap_worst.png` | ⑤ 측점 맞춤이 같은 굽이를 더 바깥으로(29 m) |
| `fig_M5_all.png` · `fig_M5_zoom.png` | 곧게 편 꼴 — 지금 길 끝 구간 78 m 고리 · M 은 예정노선 위 |
| `fig_M<n>_all.png` · `fig_M<n>_zoom.png` | 꼴마다 전체 · 고친 구간 확대(회색 예정노선 · 빨강 지금 길 · 보라 C · 초록 M · 동그라미 = 교각점) |
| `fig_M<n>_worst.png` | 지금 길이 가장 벌어진 자리 확대 — 지금 길 대 M |
## 4. 권함
**갈래 M** — 합친 뒤 곡선 수 고정 · 교각점 · R 를 예정노선에 최소제곱으로 맞추며 측점 · 최소 R 을 벌점으로 단계적으로 조여 맞춤.
- 차이(여덟 꼴 평균): 최대 26.5 → 7.3 m(−72 %) · 평균 3.80 → 1.48 m(−61 %) · 95 % 16.4 → 3.9 m · 수정 없음(M0)도 13.4 → 5.8 m.
- 제약: 곡선 수 8/8 유지 · 측점 어김 0 · R 미달 0 · 계류 0 · 복도 밖 0 · 원지반 기울기 넘은 곳(참고) 지금 길과 같은 수준(8~14 대 9~13) · 노선 횡단 토공 −1.2 %(꼴마다 −12 ~ +7 %).
- 시간: 2.5~5.6 초(지금 1~2.8 초) — 합치기까지 1.2 초는 같음 · 맞춤 0.1~0.6 초 · 측점 벌점 1~4 초.
고칠 자리:
- `B05_Profile_Engine_RouteInitial_Follow.merged_follow` — 합치기(`merge_same_side`) 뒤 `snap_curves_to_stations` 대신 새 단계 「맞춤 + 측점 벌점」.
- 새 파일 `B05_Profile/B05_Profile_Engine_RouteInitial_Fit.py`(150 줄 안팎 · `..._Station.py` 659 줄이라 거기 안 넣음) — 성긴 최소제곱 맞춤(`tmp/773/branches_sparse.py` `fit_sparse` · `snap_by_penalty`) · 측점 고름 · 4 자리 · 3 자리 반올림 · 끝 확인.
- **안전판(스냅 절대)**: 끝 확인 = MC 측점 어김 0 · R ≥ 최소 R · 곡선 수 그대로 — 하나라도 어기면 지금 측점 맞춤(`snap_curves_to_stations` · guard)으로 물러남.
- 라이브러리: scipy(이미 requirements · B05 다른 엔진이 씀) · 새 것 0.
- 같은 함수를 체인 처음(초기 폴리라인 `followed_table`) · 추천 「예상노선 추적」도 부름 → 초기값이 같이 바뀜 · 기존 확정 노선은 안 바뀜(다음 체인 · 끌 때부터) · 시험 `test_758_1_follow_merge.py` 함께 고침.
남는 흠:
- 벌점 수렴이 드물게 측점 하나를 못 맞춤(N 1 건) → 안전판으로 지금 길이 나오는 경우 차이도 지금 수준.
- 직접 잼(Guard)은 맞춤 안에 안 넣음 — 곡선 조각 토공 가늠이 고친 예정노선보다 +5 % 넘는 곳이 지금 길보다 많음(참고 잣대 · 노선 전체 토공은 줄음) · 넣으면 차이가 조금 늘고 셈이 느려짐.
- 시간 +1~3 초(끌 때마다) — 같은 입력 기억(`_MEMO`)은 그대로 · 더 줄이려면 고친 구간 곡선만 다시 맞춤(나머지 고정).
- 합치기(④)가 정한 곡선 자리 자체가 크게 벗어나면(M5 고리 같은 틀) 맞춤이 끌어오지만 곡선 수는 그대로 — 틀이 나쁘면 R 이 커지거나 교각점이 멀리 감.
- 시험은 검증_sub1 지형 하나 · 최소 R 12 m 하나 — 다른 지형 · 설계속도 40(최소 R 60 m)은 구현 때 확인.
사용자에게 물을 것:
1. 「R 개수」 = 같은 쪽 합치기 뒤 곡선 수(권함 · 토공 최소 곡선 수)인지, 수정 **전** 평면계획선 곡선 수인지.
2. 곡선 수가 지금 길보다 0~5 개 많아짐(측점 맞춤이 더 합치던 것을 멈춤) — 받아들이는지.
## 시험 스크립트(tmp/773 · 다음 일에 씀)
| 파일 | 하는 일 |
|---|---|
| `load.py` | 검증_sub1 지형 · 제약 · 예정노선 읽어 `land.pkl`(DB 읽기만) |
| `lib.py` | 지금 길 단계별 베낌(`current_stages`) · 차이 · 제약 잣대 |
| `mods.py` | 수정 꼴 여덟 |
| `run_current.py` | 표 1 · 2 → `current.json` |
| `branches.py` · `branches_sparse.py` | 갈래들(M = `run_new("M")` · `fit_sparse` · `snap_by_penalty`) |
| `run_branches.py` | 갈래 × 꼴 → `branches.json` · `branch_lines.pkl` (`python tmp/773/run_branches.py M --modM1`) |
| `make_tables.py` · `figs.py` · `fig_stages.py` · `fig_worst_am.py` · `draw.py` | 표 · 그림(PIL) |