@@ -249,11 +249,9 @@ function buildLandscapeCompositeLayoutFallback(
249249 sunRadius,
250250 travelVector,
251251 } ) ;
252- const moonOffsetX = moonGeometry . moonCenterX - moonGeometryStageSize / 2 ;
253- const moonOffsetY = moonGeometry . moonCenterY - moonGeometryStageSize / 2 ;
254252 moon = {
255- x : clampedX + moonOffsetX ,
256- y : clampedY + moonOffsetY ,
253+ x : clampedX + moonGeometry . moonOffsetX ,
254+ y : clampedY + moonGeometry . moonOffsetY ,
257255 radius : moonGeometry . moonRadius ,
258256 } ;
259257 }
@@ -473,6 +471,7 @@ export function buildLandscapeCompositeLayout(
473471 frameWidth ,
474472 frameHeight ,
475473 ) ;
474+ const travelVector = normalizeTravelVector ( input . travelVector ) ;
476475 const rawHorizonY = anchorY + ( maxSunAltitudeDeg / LANDSCAPE_VERTICAL_FOV_DEG_24MM ) * frameHeight ;
477476 const horizonY = clampRange ( rawHorizonY , 0 , frameHeight ) ;
478477
@@ -497,8 +496,6 @@ export function buildLandscapeCompositeLayout(
497496 const rawY = anchorY - ( altitudeDeltaDeg / LANDSCAPE_VERTICAL_FOV_DEG_24MM ) * frameHeight ;
498497 const clampedX = clampRange ( rawX , minX , maxX ) ;
499498 const clampedY = clampRange ( rawY , minY , maxY ) ;
500- const clampedDeltaX = clampedX - rawX ;
501- const clampedDeltaY = clampedY - rawY ;
502499 const clamped = Math . abs ( clampedX - rawX ) > 0.01 || Math . abs ( clampedY - rawY ) > 0.01 ;
503500
504501 let moon :
@@ -509,30 +506,21 @@ export function buildLandscapeCompositeLayout(
509506 }
510507 | undefined ;
511508 if ( row . showMoon ) {
512- const moonRadius = bodyAngularRadiusDegToPixels (
513- sample . moon . angularRadiusDeg ,
514- frameWidth ,
515- frameHeight ,
516- ) ;
517- const moonAzimuthDeltaDeg = normalizeSignedDeltaDeg ( maxSunAzimuthDeg , sample . moon . azimuthDeg ) ;
518- const moonAltitudeDeltaDeg = sample . moon . altitudeDeg - maxSunAltitudeDeg ;
519- const moonX =
520- anchorX +
521- ( moonAzimuthDeltaDeg / LANDSCAPE_HORIZONTAL_FOV_DEG_24MM ) * frameWidth +
522- clampedDeltaX ;
523- const moonY =
524- anchorY -
525- ( moonAltitudeDeltaDeg / LANDSCAPE_VERTICAL_FOV_DEG_24MM ) * frameHeight +
526- clampedDeltaY ;
527- const centerDistance = Math . hypot ( moonX - clampedX , moonY - clampedY ) ;
528- const isOccluding = centerDistance <= sunRadius + moonRadius + 0.25 ;
529- if ( isOccluding ) {
530- moon = {
531- x : moonX ,
532- y : moonY ,
533- radius : moonRadius ,
534- } ;
535- }
509+ const moonGeometryStageSize = Math . max ( 64 , sunRadius * LANDSCAPE_MOON_GEOMETRY_STAGE_FACTOR ) ;
510+ const moonGeometry = calculatePreviewMoonGeometry ( {
511+ progress : row . progress ,
512+ kindAtLocation : input . kindAtLocation ,
513+ magnitude : input . magnitude ,
514+ contacts : input . schedule . contacts ,
515+ stageSize : moonGeometryStageSize ,
516+ sunRadius,
517+ travelVector,
518+ } ) ;
519+ moon = {
520+ x : clampedX + moonGeometry . moonOffsetX ,
521+ y : clampedY + moonGeometry . moonOffsetY ,
522+ radius : moonGeometry . moonRadius ,
523+ } ;
536524 }
537525
538526 return {
0 commit comments