@@ -23,9 +23,10 @@ import {
2323} from 'ks-astronomy' ;
2424import { getDateFromDayNumber_SGC , KsDateTime , KsTimeZone } from 'ks-date-time-zone' ;
2525import * as $ from 'jquery' ;
26- import { setSvgHref } from './util' ;
26+ import { describeArc , setSvgHref } from './util' ;
2727import { AppService } from './app.service' ;
2828import { padLeft } from 'ks-util' ;
29+ import { mod } from 'ks-math' ;
2930
3031const solarSystem = new SolarSystem ( ) ;
3132const eventFinder = new EventFinder ( ) ;
@@ -55,6 +56,7 @@ function formatTime(date: KsDateTime, amPm: boolean) {
5556export class Ephemeris {
5657 private planetTracks : JQuery ;
5758 private planetSymbols : JQuery ;
59+ private risenTracks : JQuery ;
5860 private sunrises : JQuery [ ] = [ ] ;
5961 private sunsets : JQuery [ ] = [ ] ;
6062 private moons : JQuery [ ] = [ ] ;
@@ -70,6 +72,7 @@ export class Ephemeris {
7072
7173 this . planetTracks = $ ( '#planet-tracks' ) ;
7274 this . planetSymbols = $ ( '#planets' ) ;
75+ this . risenTracks = $ ( '#risen-tracks' ) ;
7376
7477 for ( let i = 0 ; i < 4 ; ++ i ) {
7578 this . sunrises [ i ] = $ ( '#day' + i + '-sunrise' ) ;
@@ -87,10 +90,12 @@ export class Ephemeris {
8790 if ( newValue ) {
8891 this . planetTracks . css ( 'visibility' , 'hidden' ) ;
8992 this . planetSymbols . css ( 'visibility' , 'hidden' ) ;
93+ this . risenTracks . css ( 'visibility' , 'hidden' ) ;
9094 }
9195 else {
9296 this . planetTracks . css ( 'visibility' , 'visible' ) ;
9397 this . planetSymbols . css ( 'visibility' , 'visible' ) ;
98+ this . risenTracks . css ( 'visibility' , 'visible' ) ;
9499 }
95100 }
96101 }
@@ -118,7 +123,32 @@ export class Ephemeris {
118123 targetAltitude -= AVG_SUN_MOON_RADIUS ;
119124
120125 rotate ( elem , - eclipticLongitude ) ;
121- elem . css ( 'stroke-width' , altitude < targetAltitude ? '0.5' : '0' ) ;
126+ elem . css ( 'stroke-width' , altitude < targetAltitude ? '0.25' : '0' ) ;
127+ elem [ 0 ] . setAttributeNS ( null , 'r' , altitude < targetAltitude ? '0.625' : '0.75' ) ;
128+
129+ const risenTrack = $ ( '#risen-' + planetIds [ index ] ) ;
130+ const rise = eventFinder . findEvent ( planet , RISE_EVENT , time_JDU + 5 / 1400 , observer , timezone , null , true ) ;
131+ const set = eventFinder . findEvent ( planet , SET_EVENT , time_JDU - 5 / 1440 , observer , timezone ) ;
132+
133+ if ( rise && rise . ut > time_JDU - 1.1 && set && set . ut < time_JDU + 1.1 ) {
134+ const currentAngle = mod ( - eclipticLongitude , 360 ) ;
135+ const radius = 10 + index * 2 ;
136+ let riseAngle = currentAngle + ( time_JDU - rise . ut ) * 360 ;
137+ let setAngle = currentAngle + ( time_JDU - set . ut ) * 360 ;
138+
139+ while ( setAngle + 360 < riseAngle )
140+ setAngle += 360 ;
141+
142+ while ( riseAngle < setAngle )
143+ riseAngle += 360 ;
144+
145+ const arc = describeArc ( 50 , 50 , radius , setAngle , riseAngle ) ;
146+
147+ risenTrack [ 0 ] . setAttributeNS ( null , 'd' , arc ) ;
148+ risenTrack . css ( 'visibility' , 'inherited' ) ;
149+ }
150+ else
151+ risenTrack . css ( 'visibility' , 'hidden' ) ;
122152 } ) ;
123153
124154 eventFinder . getRiseAndSetEvents ( SUN , wallTime . y , wallTime . m , wallTime . d , 4 , observer , timezone ) . then ( daysOfEvents => {
0 commit comments