"""플랜지 디스크 정밀 분석: z<-500 영역 정점을 플랜지로 보고 z분포·평면(PCA) 산출."""
import numpy as np
P=r'E:\도진팩토리\3D스캔및티칭시스템\assets\welding_torch_param_v1.obj'
vs=[]
for line in open(P,encoding='utf-8',errors='ignore'):
    if line.startswith('v '):
        _,x,y,z=line.split()[:4]; vs.append([float(x),float(y),float(z)])
V=np.array(vs)
z=V[:,2]
# z 히스토그램(플랜지 영역 파악)
print("z분포 하위:")
zs=np.sort(z)
for zz in [-537,-535,-530,-525,-522,-520,-515,-510,-505,-500]:
    print("  z<%d : %d점"%(zz,(z<zz).sum()))
# 플랜지 영역 후보들 각각 평면 피팅
for thr in [-505,-510,-515,-518]:
    F=V[z<thr]
    c=F.mean(0); M=F-c; u,s,vt=np.linalg.svd(M,full_matrices=False)
    n=vt[2];
    if n@np.array([0,0,1])<0: n=-n
    ang=np.degrees(np.arccos(min(1,abs(n@np.array([0,0,1.0])))))
    print("\n[z<%d] %d점 중심%s"%(thr,len(F),c.round(1)))
    print("   특이값%s  법선%s  (Z와 %.2f도)"%(s.round(2),n.round(4),ang))
