Files
CMPlanning/scripts/verify_geom/final2.py
T
Claude 3638249c43 chore(verify): store Step 3 solid-model verification scripts and geometry results
- scripts/verify_solids_step3.py: deterministic checks M1-M6, S1-S2, G1 (9/9 PASS)
- scripts/verify_geom/: independent DXF-vs-STEP section deviation scripts (agent run)
- data/verify_geom_hd2_results.json: Hausdorff results at 4+745, 5+100, 5+470
Judgement: DOC/05_검증/검증_본선3D솔리드모델_2026-10-22_v0.1.00.md (FAIL 3 items to Step 4)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A5Cun3RHQKna9qxE6ybZ4A
2026-10-22 00:51:01 +00:00

24 lines
1.7 KiB
Python

import sys
exec(open('/tmp/verify_daesan2_run/scripts/final.py').read().split("for st in ['4745.0005','5100.0','5469.9995']:")[0])
for st in ['4745.0005','5100.0']:
B=to_dxf(pts(st,lambda g,i:g=='기층·인버트(가정)'),st,1); D=to_dxf(pts(st,lambda g,i:g=='배수(측구)'),st,1)
bw=B[(B[:,0]>=9526.3+150)&(B[:,0]<=18726.3-150)]
xs=np.arange(9676.3,18576.3,50.0)
top_line=lambda x: 15484.0+(x-9526.3)*(15300-15484)/9200.0
bot_line=lambda x: 15334.0+(x-9526.3)*(15150-15334)/9200.0
tt=[];bb=[]
for x0 in xs:
m=(bw[:,0]>=x0-25)&(bw[:,0]<x0+25)
if m.sum()==0: continue
tt.append(bw[m,1].max()-top_line(x0)); bb.append(bw[m,1].min()-bot_line(x0))
tt=np.array(tt); bb=np.array(bb)
print(f"{st}: BASE top (pavement-bottom interface), interior 150mm from ends: model-drawn max|dev|={np.abs(tt).max():.1f} mm, mean={tt.mean():.1f} mm (signed mean)")
print(f"{st}: BASE bottom (drawn excavation floor 15334->15150), interior: max|dev|={np.abs(bb).max():.1f} mm, mean={bb.mean():.1f} mm (signed; negative=model below drawing)")
# drains body vs lid
body=np.vstack([REF[k] for k in ['DRN_wallL1','DRN_wallL2','DRN_botL','DRN_pipeL','DRN_wallR1','DRN_wallR2','DRN_botR','DRN_pipeR']])
lid=np.vstack([REF['DRN_topL'],REF['DRN_topR']])
dm=D[(D[:,0]>8900)&(D[:,0]<19300)]
a,_=cKDTree(dm).query(body); b,_=cKDTree(dm).query(lid)
print(f"{st}: DRN body (walls/bottom/pipe) ref->model max={a.max():.1f} mm; lid (450-wide top line) ref->model max={b.max():.1f} mm")
print(f"{st}: DRN model x-extent per ditch: left {dm[dm[:,0]<14126,0].min():.0f}-{dm[dm[:,0]<14126,0].max():.0f}, right {dm[dm[:,0]>14126,0].min():.0f}-{dm[dm[:,0]>14126,0].max():.0f}")