import { ANGLE_TOLERANCE, BELOW_HORIZON_TOLERANCE, compareSolar, solarCases } from './solar-cases.ts'; console.log(`# 태양 위치 검증 결과\n\n관측점 37.4450 N, 126.9640 E (임시). SunCalc 2.0.1과 독립 NOAA/Meeus 수식 구현 비교. 방위각과 0° 이상 고도각 허용 오차: ${ANGLE_TOLERANCE}°. 0° 아래 고도값은 굴절 모델 차이를 고려해 ${BELOW_HORIZON_TOLERANCE}°. 실측 검증이 아닌 계산 대조.\n`); console.log('| KST | SunCalc 방위각 | NOAA 방위각 | 차이 | SunCalc 겉보기 고도 | NOAA 겉보기 고도 | 차이 |'); console.log('|---|---:|---:|---:|---:|---:|---:|'); let maxAz = 0, maxAlt = 0, maxVisibleAlt = 0, passed = true; for (const iso of solarCases) { const c = compareSolar(iso); maxAz = Math.max(maxAz, c.azimuthError); maxAlt = Math.max(maxAlt, c.altitudeError); if (c.actual.altitude >= 0) maxVisibleAlt = Math.max(maxVisibleAlt, c.altitudeError); if (c.azimuthError > ANGLE_TOLERANCE || c.altitudeError > c.altitudeTolerance) passed = false; console.log(`| ${iso.replace('T', ' ').replace('+09:00', '')} | ${c.actual.azimuth.toFixed(4)} | ${c.reference.azimuth.toFixed(4)} | ${c.azimuthError.toFixed(4)} | ${c.actual.altitude.toFixed(4)} | ${c.reference.altitude.toFixed(4)} | ${c.altitudeError.toFixed(4)} |`); } console.log(`\n최대 차이: 방위각 ${maxAz.toFixed(4)}°, 0° 이상 태양 고도 ${maxVisibleAlt.toFixed(4)}°, 지평선 아래 포함 고도 ${maxAlt.toFixed(4)}°.\n\nSunCalc는 기하학적 고도가 음수이면 굴절 수식의 입력을 0°로 고정한다(약 0.484° 보정). NOAA는 음의 고도에도 별도 수식을 적용한다. 따라서 처음 시도한 전 구간 0.1° 기준은 5개 지평선 아래 사례에서 실패했다. 이 차이를 숨기지 않고 0° 아래 구간의 허용 차이를 분리했다. 지형 모드에서는 음의 고도 태양도 일부 보일 수 있으므로 이 모델 차이도 관측 일출의 오차 요인이다.\n\n출처: [NOAA 계산 설명](https://gml.noaa.gov/grad/solcalc/calcdetails.html), [NOAA 계산 소스](https://gml.noaa.gov/grad/solcalc/main.js), [SunCalc 2.x](https://github.com/mourner/suncalc).\n\n재현: npm run verify:solar. 앱 계산에는 NOAA 검증 코드를 사용하지 않는다. 대기 굴절 모델 차이와 실제 기압·기온 변동, 지형 차폐는 이 비교로 검증되지 않는다.`); if (!passed) process.exitCode = 1;