Class: CalcSun
- Inherits:
-
Object
- Object
- CalcSun
- Defined in:
- lib/calc_sun/version.rb,
ext/calc_sun/calc_sun.c
Overview
class file CalcSun
Constant Summary collapse
- VERSION =
version 1.2.5
'1.2.6'
Instance Attribute Summary collapse
Instance Method Summary collapse
-
#ajd(date) ⇒ Object
convert Date or DateTime object to AJD number.
-
#ajd2dt(ajd) ⇒ Object
convert input float to DateTime object.
- #altitude(vajd, vlat, vlon) ⇒ Object
- #azimuth(vajd, vlat, vlon) ⇒ Object
- #daylight_time(vajd, vlat) ⇒ Object
- #declination(vajd) ⇒ Object
- #diurnal_arc(vajd, vlat) ⇒ Object
- #eccentric_anomaly(vajd) ⇒ Object
- #eccentricity(vajd) ⇒ Object
- #ecliptic_x(vajd) ⇒ Object
- #ecliptic_y(vajd) ⇒ Object
- #eot_min(vajd) ⇒ Object
-
#equation_of_center(vajd) ⇒ Object
static VALUE func_equation_of_center(VALUE self, VALUE vajd){ double vma = NUM2DBL(func_mean_anomaly(self, vajd)); double ve = NUM2DBL(func_eccentricity(self, vajd)); double ve2 = ve * 2.0; double vesqr = ve * ve; double vesqr54 = 5.0 / 4.0 * vesqr; double vecube12 = (vesqr * ve) / 12.0; double veoc = ve2 * sin(vma) + vesqr54 * sin(2 * vma) + vecube12 * (13.0 * sin(3 * vma) - 3.0 * sin(vma)); return DBL2NUM(roundf(veoc * RND12) / RND12); }.
- #equation_of_time(vajd) ⇒ Object
- #gha(vajd) ⇒ Object
- #gmsa(vajd) ⇒ Object
- #gmsa0(vajd) ⇒ Object
- #gmst(vajd) ⇒ Object
- #gmst0(vajd) ⇒ Object
-
#initialize ⇒ Object
constructor
Create CalcSun class Ruby object.
-
#jd(date) ⇒ Object
convert Date or DateTime object to JD number.
- #jd2000_dif(vajd) ⇒ Object
- #jd2000_dif_lon(vajd, vlon) ⇒ Object
- #lha(vajd, vlon) ⇒ Object
- #local_sidereal_time(vajd, vlon) ⇒ Object
- #longitude_of_perihelion(vajd) ⇒ Object
-
#mean_anomaly(date) ⇒ Object
convert Date or DateTime object to float representing Solar Mean Anomaly in radians.
- #mean_longitude(vajd) ⇒ Object
-
#mean_sidereal_time(vajd) ⇒ Object
static VALUE func_gmsa0(VALUE self, VALUE vajd){ double tl = NUM2DBL(func_true_longitude(self, vajd)); double st = anp(PI + tl) * R2D; return DBL2NUM(roundf(st * RND12) / RND12); }.
- #min_to_s(vmin) ⇒ Object
- #noon(vajd, vlat, vlon) ⇒ Object
- #noon_jd(vajd, vlat, vlon) ⇒ Object
- #obliquity_of_ecliptic(vajd) ⇒ Object
- #radius_vector(vajd) ⇒ Object
- #reverse_12(vx) ⇒ Object
- #right_ascension(vajd) ⇒ Object
- #rise(vajd, vlat, vlon) ⇒ Object
- #rise_jd(vajd, vlat, vlon) ⇒ Object
- #set(vajd, vlat, vlon) ⇒ Object
-
#date('yyyy-mm-dd') ⇒ Object
convert input string to DateTime object.
- #set_jd(vajd, vlat, vlon) ⇒ Object
- #t_mid_day(vajd, vlat, vlon) ⇒ Object
-
#t_rise(vajd, vlat, vlon) ⇒ Object
return DBL2NUM(lst - ra);.
- #t_set(vajd, vlat, vlon) ⇒ Object
- #t_south(vajd, vlon) ⇒ Object
- #true_anomaly(vajd) ⇒ Object
- #true_anomaly1(vajd) ⇒ Object
- #true_longitude(vajd) ⇒ Object
- #xv(vajd) ⇒ Object
- #yv(vajd) ⇒ Object
Constructor Details
#initialize ⇒ Object
Create CalcSun class Ruby object.
34 35 36 |
# File 'ext/calc_sun/calc_sun.c', line 34 static VALUE t_init(VALUE self){ return self; } |
Instance Attribute Details
#date ⇒ Object
Instance Method Details
#ajd(date) ⇒ Object
convert Date or DateTime object to AJD number.
70 71 72 73 |
# File 'ext/calc_sun/calc_sun.c', line 70 static VALUE func_get_ajd(VALUE self, VALUE vdatetime){ double ajd = NUM2DBL(rb_funcall(vdatetime, rb_intern("ajd"), 0)); return DBL2NUM(ajd); } |
#ajd2dt(ajd) ⇒ Object
convert input float to DateTime object.
56 57 58 59 60 61 62 |
# File 'ext/calc_sun/calc_sun.c', line 56 static VALUE func_ajd_2_datetime(VALUE self, VALUE vajd){ VALUE cDateTime = rb_const_get(rb_cObject, rb_intern("DateTime")); double ajd = NUM2DBL(vajd) + 0.5; VALUE vfajd = DBL2NUM(ajd); VALUE vdatetime = rb_funcall(cDateTime, rb_intern("jd"), 1, vfajd); return vdatetime; } |
#altitude(vajd, vlat, vlon) ⇒ Object
548 549 550 551 552 553 554 555 556 |
# File 'ext/calc_sun/calc_sun.c', line 548 static VALUE func_altitude(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double lat = NUM2DBL(vlat) * D2R; double delta = NUM2DBL(func_declination(self, vajd)) * D2R; double lha = NUM2DBL(func_lha(self, vajd, vlon)) * D2R; double alt = asin(sin(lat) * sin(delta) + cos(lat) * cos(delta) * cos(lha)) * R2D; return DBL2NUM(roundf(alt * RND12) / RND12); } |
#azimuth(vajd, vlat, vlon) ⇒ Object
558 559 560 561 562 563 564 565 566 567 |
# File 'ext/calc_sun/calc_sun.c', line 558 static VALUE func_azimuth(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double lat = NUM2DBL(vlat) * D2R; double delta = NUM2DBL(func_declination(self, vajd)) * D2R; double lha = NUM2DBL(func_lha(self, vajd, vlon)) * D2R; double az; az = atan2(sin(lha), cos(lha) * sin(lat) - tan(delta) * cos(lat)) * R2D + 180.0; return DBL2NUM(roundf(az * RND12) / RND12); } |
#daylight_time(vajd, vlat) ⇒ Object
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 |
# File 'ext/calc_sun/calc_sun.c', line 368 static VALUE func_dlt(VALUE self, VALUE vajd, VALUE vlat){ double jd = floor(NUM2DBL(vajd)); double vsin_alt = sin(-0.8333 * D2R); double vlat_r = NUM2DBL(vlat) * D2R; double vcos_lat = cos(vlat_r); double vsin_lat = sin(vlat_r); VALUE vjd = DBL2NUM(jd); double vooe = NUM2DBL(func_obliquity_of_ecliptic(self, vjd)); double vtl = NUM2DBL(func_true_longitude(self, vjd)); double vsin_dec = sin(vooe) * sin(vtl); double vcos_dec = sqrt( 1.0 - vsin_dec * vsin_dec ); double vdl = acos( (vsin_alt - vsin_dec * vsin_lat) / (vcos_dec * vcos_lat)); double vdla = vdl * R2D; double vdlt = vdla / 15.0 * 2.0; return DBL2NUM(roundf(vdlt * RND12) / RND12); } |
#declination(vajd) ⇒ Object
349 350 351 352 353 354 355 356 357 358 359 360 |
# File 'ext/calc_sun/calc_sun.c', line 349 static VALUE func_declination(VALUE self, VALUE vajd){ double vex = NUM2DBL(func_ecliptic_x(self, vajd)); double vey = NUM2DBL(func_ecliptic_y(self, vajd)); double vooe = NUM2DBL(func_obliquity_of_ecliptic(self, vajd)); double ver = sqrt(vex * vex + vey * vey); double vz = vey * sin(vooe); double vdec = atan2(vz, ver); return DBL2NUM(roundf((vdec * R2D) * RND12) / RND12); } |
#diurnal_arc(vajd, vlat) ⇒ Object
391 392 393 394 395 396 |
# File 'ext/calc_sun/calc_sun.c', line 391 static VALUE func_diurnal_arc(VALUE self, VALUE vajd, VALUE vlat){ double jd = floor(NUM2DBL(vajd)); double dlt = NUM2DBL(func_dlt(self, DBL2NUM(jd), vlat)); double da = dlt / 2.0; return DBL2NUM(roundf(da * RND12) / RND12); } |
#eccentric_anomaly(vajd) ⇒ Object
173 174 175 176 177 178 179 180 181 |
# File 'ext/calc_sun/calc_sun.c', line 173 static VALUE func_eccentric_anomaly(VALUE self, VALUE vajd){ double ve = NUM2DBL(func_eccentricity(self, vajd)); double vml = NUM2DBL(func_mean_longitude(self, vajd)); double vea = vml + ve * sin(vml) * (1.0 + ve * cos(vml)); return DBL2NUM(roundf(vea * RND12) / RND12); } |
#eccentricity(vajd) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'ext/calc_sun/calc_sun.c', line 106 static VALUE func_eccentricity(VALUE self, VALUE vajd){ double jd = NUM2DBL(vajd); double d = jd - DJ00; double ve = 0.016709 - 1.151e-9 * d; return DBL2NUM(roundf(ve * RND12) / RND12); } |
#ecliptic_x(vajd) ⇒ Object
310 311 312 313 314 315 316 317 |
# File 'ext/calc_sun/calc_sun.c', line 310 static VALUE func_ecliptic_x(VALUE self, VALUE vajd){ double vrv = NUM2DBL(func_rv(self, vajd)); double vtl = NUM2DBL(func_true_longitude(self, vajd)); double vex = vrv * cos(vtl); return DBL2NUM(roundf(vex * RND12) / RND12); } |
#ecliptic_y(vajd) ⇒ Object
319 320 321 322 323 324 325 326 |
# File 'ext/calc_sun/calc_sun.c', line 319 static VALUE func_ecliptic_y(VALUE self, VALUE vajd){ double vrv = NUM2DBL(func_rv(self, vajd)); double vtl = NUM2DBL(func_true_longitude(self, vajd)); double vey = vrv * sin(vtl); return DBL2NUM(roundf(vey * RND12) / RND12); } |
#eot_min(vajd) ⇒ Object
532 533 534 535 |
# File 'ext/calc_sun/calc_sun.c', line 532 static VALUE func_eot_min(VALUE self, VALUE vajd){ double eot = NUM2DBL(func_eot(self, vajd)); return DBL2NUM(roundf((eot / 15 * 60) * RND12) / RND12); } |
#equation_of_center(vajd) ⇒ Object
static VALUE func_equation_of_center(VALUE self, VALUE vajd)
double vma =
NUM2DBL(func_mean_anomaly(self, vajd));
double ve =
NUM2DBL(func_eccentricity(self, vajd));
double ve2 = ve * 2.0;
double vesqr = ve * ve;
double vesqr54 = 5.0 / 4.0 * vesqr;
double vecube12 = (vesqr * ve) / 12.0;
double veoc =
ve2 * sin(vma) +
vesqr54 * sin(2 * vma) +
vecube12 * (13.0 * sin(3 * vma) - 3.0 * sin(vma));
return DBL2NUM(roundf(veoc * RND12) / RND12);
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'ext/calc_sun/calc_sun.c', line 133 static VALUE func_equation_of_center(VALUE self, VALUE vajd){ double mas = NUM2DBL(func_mean_anomaly(self, vajd)); double eoe = NUM2DBL(func_eccentricity(self, vajd)); double sin1a = sin(1.0 * mas) * 1.0 / 4.0; double sin1b = sin(1.0 * mas) * 5.0 / 96.0; double sin2a = sin(2.0 * mas) * 11.0 / 24.0; double sin2b = sin(2.0 * mas) * 5.0 / 4.0; double sin3a = sin(3.0 * mas) * 13.0 / 12.0; double sin3b = sin(3.0 * mas) * 43.0 / 64.0; double sin4 = sin(4.0 * mas) * 103.0 / 96.0; double sin5 = sin(5.0 * mas) * 1097.0 / 960.0; double ad3 = sin3a - sin1a; double ad4 = sin4 - sin2a; double ad5 = sin5 + sin1b - sin3b; double veoc = eoe * (sin1a * 8.0 + eoe * (sin2b + eoe * (ad3 + eoe * (ad4 + eoe * ad5)))); return DBL2NUM(roundf(veoc * RND12) / RND12); } |
#equation_of_time(vajd) ⇒ Object
520 521 522 523 524 525 526 527 528 529 530 |
# File 'ext/calc_sun/calc_sun.c', line 520 static VALUE func_eot(VALUE self, VALUE vajd){ double ma = NUM2DBL(func_mean_anomaly(self, vajd)); double ta = NUM2DBL(func_true_anomaly(self, vajd)); double tl = NUM2DBL(func_true_longitude(self, vajd)); double ra = 15.0 * D2R * NUM2DBL(func_right_ascension(self, vajd)); return DBL2NUM(roundf(anp(ma - ta + tl - ra) * R2D * RND12) / RND12 ); } |
#gha(vajd) ⇒ Object
340 341 342 343 344 345 346 347 |
# File 'ext/calc_sun/calc_sun.c', line 340 static VALUE func_gha(VALUE self, VALUE vajd){ double gmsa = NUM2DBL(func_mean_sidetime(self, vajd)) * 15 * D2R; double ra = NUM2DBL(func_right_ascension(self, vajd)) * 15 * D2R; double gha = anp(gmsa - ra); return DBL2NUM(roundf(gha * R2D * RND12) / RND12); } |
#gmsa(vajd) ⇒ Object
280 281 282 283 284 285 286 287 |
# File 'ext/calc_sun/calc_sun.c', line 280 static VALUE func_gmsa(VALUE self, VALUE vajd){ double ajd = NUM2DBL(vajd) - 0.5; double ajdt = fmod(ajd, 1.0); double vtr = ajdt * 24.0 * 1.00273790935 * 15 * D2R; double msar0 = NUM2DBL(func_gmsa0(self, vajd)) * D2R; double msa = anp(msar0 + vtr) * R2D; return DBL2NUM(roundf(msa * RND12) / RND12); } |
#gmsa0(vajd) ⇒ Object
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'ext/calc_sun/calc_sun.c', line 264 static VALUE func_gmsa0(VALUE self, VALUE vajd){ double msa0; double ajd0 = NUM2DBL(vajd); double ajdt = fmod(ajd0, 1.0); if (ajdt <= 0.5){ ajd0 -= 0.5; ajd0 = floor(ajd0) + 0.5; } else{ ajd0 = floor(ajd0) + 0.5; } msa0 = NUM2DBL(func_mean_sidetime(self, DBL2NUM(ajd0))) * 15; return DBL2NUM(roundf(msa0 * RND12) / RND12); } |
#gmst(vajd) ⇒ Object
295 296 297 298 |
# File 'ext/calc_sun/calc_sun.c', line 295 static VALUE func_gmst(VALUE self, VALUE vajd){ double vmst = NUM2DBL(func_gmsa(self, vajd)) / 15.0; return DBL2NUM(roundf(vmst * RND12) / RND12); } |
#gmst0(vajd) ⇒ Object
289 290 291 292 293 |
# File 'ext/calc_sun/calc_sun.c', line 289 static VALUE func_gmst0(VALUE self, VALUE vajd){ double era0 = NUM2DBL(func_gmsa0(self, vajd)) / 15.0; return DBL2NUM(roundf(era0 * RND12) / RND12); } |
#jd(date) ⇒ Object
convert Date or DateTime object to JD number.
81 82 83 84 |
# File 'ext/calc_sun/calc_sun.c', line 81 static VALUE func_get_jd(VALUE self, VALUE vdatetime){ double jd = NUM2DBL(rb_funcall(vdatetime, rb_intern("jd"), 0)); return DBL2NUM(jd); } |
#jd2000_dif(vajd) ⇒ Object
502 503 504 505 506 507 508 509 510 511 |
# File 'ext/calc_sun/calc_sun.c', line 502 static VALUE func_jd_from_2000(VALUE self, VALUE vajd){ /*VALUE vdatetime = func_ajd_2_datetime(self, vajd); int year = NUM2INT(rb_funcall(vdatetime, rb_intern("year"), 0)); int month = NUM2INT(rb_funcall(vdatetime, rb_intern("month"), 0)); int day = NUM2INT(rb_funcall(vdatetime, rb_intern("day"), 0)); double days = days_since_2000_Jan_0(year, month, day);*/ double ajd = NUM2DBL(vajd); double days = ajd - 2451545.0; return INT2NUM(days); } |
#jd2000_dif_lon(vajd, vlon) ⇒ Object
513 514 515 516 517 518 |
# File 'ext/calc_sun/calc_sun.c', line 513 static VALUE func_days_from_2000(VALUE self, VALUE vajd, VALUE vlon){ double jd = NUM2DBL(vajd); double lon = NUM2DBL(vlon); double days = jd - DJ00 - lon / 360; return DBL2NUM(roundf(days * RND12) / RND12); } |
#lha(vajd, vlon) ⇒ Object
541 542 543 544 545 546 |
# File 'ext/calc_sun/calc_sun.c', line 541 static VALUE func_lha(VALUE self, VALUE vajd, VALUE vlon){ double lon = NUM2DBL(vlon) * D2R; double gha = NUM2DBL(func_gha(self, vajd)) * D2R; double lha = anp(gha + lon) * R2D; return DBL2NUM(roundf(lha * RND12) / RND12); } |
#local_sidereal_time(vajd, vlon) ⇒ Object
362 363 364 365 366 |
# File 'ext/calc_sun/calc_sun.c', line 362 static VALUE func_local_sidetime(VALUE self, VALUE vajd, VALUE vlon){ double vst = NUM2DBL(func_mean_sidetime(self, vajd)); double vlst = vst + NUM2DBL(vlon) / 15.0 ; return DBL2NUM(fmod(roundf(vlst * RND12) / RND12, 24.0)); } |
#longitude_of_perihelion(vajd) ⇒ Object
191 192 193 194 195 196 197 198 199 200 |
# File 'ext/calc_sun/calc_sun.c', line 191 static VALUE func_longitude_of_perihelion(VALUE self, VALUE vajd){ double jd = NUM2DBL(vajd); double d = jd - DJ00; double vlop = fmod( (282.9404 + 4.70935e-05 * d ) * D2R, M2PI); return DBL2NUM(roundf(vlop * RND12) / RND12); } |
#mean_anomaly(date) ⇒ Object
convert Date or DateTime object to float representing Solar Mean Anomaly in radians.
94 95 96 97 98 99 100 101 102 103 104 |
# File 'ext/calc_sun/calc_sun.c', line 94 static VALUE func_mean_anomaly(VALUE self, VALUE vajd){ double ajd = NUM2DBL(vajd); double t = (ajd - DJ00) / 36525; double vma = fmod(( 357.52910918 + t * ( 35999.05029113889 + t * ( 1.0 / -6507.592190889371 + t * ( 1.0 / 26470588.235294115 + t * (1.0 / -313315926.8929504))))) * D2R, M2PI); return DBL2NUM(roundf(vma * RND12) / RND12); } |
#mean_longitude(vajd) ⇒ Object
162 163 164 165 166 167 168 169 170 171 |
# File 'ext/calc_sun/calc_sun.c', line 162 static VALUE func_mean_longitude(VALUE self, VALUE vajd){ double jd = NUM2DBL(vajd); double d = jd - DJ00; double vml = fmod( (280.4664567 + 0.9856473601037645 * d ) * D2R, M2PI); return DBL2NUM(roundf(vml * RND12) / RND12); } |
#mean_sidereal_time(vajd) ⇒ Object
static VALUE func_gmsa0(VALUE self, VALUE vajd)
double tl =
NUM2DBL(func_true_longitude(self, vajd));
double st =
anp(PI + tl) * R2D;
return DBL2NUM(roundf(st * RND12) / RND12);
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'ext/calc_sun/calc_sun.c', line 248 static VALUE func_mean_sidetime(VALUE self, VALUE vajd){ double ajd = NUM2DBL(vajd); long double sidereal; long double t; t = (ajd - 2451545.0) / 36525.0; /* calc mean angle */ sidereal = 280.46061837 + (360.98564736629 * (ajd - 2451545.0)) + (0.000387933 * t * t) - (t * t * t / 38710000.0); sidereal = anp(sidereal * D2R) * R2D; /* change to hours */ return DBL2NUM(fmod(roundf((sidereal / 15.0) * RND12) / RND12, 24.0)); } |
#min_to_s(vmin) ⇒ Object
537 538 539 |
# File 'ext/calc_sun/calc_sun.c', line 537 static VALUE func_min_to_s(VALUE self, VALUE vmin){ return Qnil; } |
#noon(vajd, vlat, vlon) ⇒ Object
444 445 446 447 448 449 450 451 452 |
# File 'ext/calc_sun/calc_sun.c', line 444 static VALUE func_noon(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double nt = NUM2DBL(func_t_south(self, vajd, vlon)); double ajd = NUM2DBL(vajd); double ntajd = floor(ajd) - 0.5 + nt / 24.0; VALUE vnt = DBL2NUM(ntajd); //VALUE date = rb_sprintf("Sun noon: %2.0f:%02.0f UTC\n", //floor(nt), floor(fmod(nt, 1.0) * 60.0)); return func_ajd_2_datetime(self, vnt); } |
#noon_jd(vajd, vlat, vlon) ⇒ Object
454 455 456 457 458 459 |
# File 'ext/calc_sun/calc_sun.c', line 454 static VALUE func_noon_jd(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double nt = NUM2DBL(func_t_south(self, vajd, vlon)); double ajd = NUM2DBL(vajd); double ntajd = floor(ajd) - 0.5 + nt / 24.0; return DBL2NUM(ntajd); } |
#obliquity_of_ecliptic(vajd) ⇒ Object
183 184 185 186 187 188 189 |
# File 'ext/calc_sun/calc_sun.c', line 183 static VALUE func_obliquity_of_ecliptic(VALUE self, VALUE vajd){ double jd = NUM2DBL(vajd); double d = jd - DJ00; double vooe = (23.439291 - 3.563E-7 * d) * D2R; return DBL2NUM(roundf(vooe * RND12) / RND12); } |
#radius_vector(vajd) ⇒ Object
300 301 302 303 304 305 306 307 308 |
# File 'ext/calc_sun/calc_sun.c', line 300 static VALUE func_rv(VALUE self, VALUE vajd){ double vxv = NUM2DBL(func_xv(self, vajd)); double vyv = NUM2DBL(func_yv(self, vajd)); double vrv = sqrt(vxv * vxv + vyv * vyv); return DBL2NUM(roundf(vrv * RND12) / RND12); } |
#reverse_12(vx) ⇒ Object
569 570 571 572 |
# File 'ext/calc_sun/calc_sun.c', line 569 static VALUE func_rev12(VALUE self, VALUE vx){ double x = NUM2DBL(vx); return DBL2NUM(x - 24.0 * floor(x * INV24 + 0.5)); } |
#right_ascension(vajd) ⇒ Object
328 329 330 331 332 333 334 335 336 337 338 |
# File 'ext/calc_sun/calc_sun.c', line 328 static VALUE func_right_ascension(VALUE self, VALUE vajd){ double vey = NUM2DBL(func_ecliptic_y(self, vajd)); double vooe = NUM2DBL(func_obliquity_of_ecliptic(self, vajd)); double vex = NUM2DBL(func_ecliptic_x(self, vajd)); double vra = fmod(atan2(vey * cos(vooe), vex) + M2PI, M2PI); return DBL2NUM(fmod(roundf((vra * R2D / 15.0) * RND12) / RND12, 24.0)); } |
#rise(vajd, vlat, vlon) ⇒ Object
427 428 429 430 431 432 433 434 435 |
# File 'ext/calc_sun/calc_sun.c', line 427 static VALUE func_rise(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double rt = NUM2DBL(func_t_rise(self, vajd, vlat, vlon)); double ajd = NUM2DBL(vajd); double rtajd = floor(ajd) - 0.5 + rt / 24.0; VALUE vrt = DBL2NUM(rtajd); //VALUE date = rb_sprintf("Sun rises: %2.0f:%02.0f UTC\n", //floor(rt), floor(fmod(rt, 1) * 60.0)); return func_ajd_2_datetime(self, vrt); } |
#rise_jd(vajd, vlat, vlon) ⇒ Object
437 438 439 440 441 442 |
# File 'ext/calc_sun/calc_sun.c', line 437 static VALUE func_rise_jd(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double rt = NUM2DBL(func_t_rise(self, vajd, vlat, vlon)); double ajd = NUM2DBL(vajd); double rtajd = floor(ajd) - 0.5 + rt / 24.0; return DBL2NUM(rtajd); } |
#set(vajd, vlat, vlon) ⇒ Object
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 |
# File 'ext/calc_sun/calc_sun.c', line 461 static VALUE func_set(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ VALUE vst; double stajd; double st = NUM2DBL(func_t_set(self, vajd, vlat, vlon)); double nt = NUM2DBL(func_t_mid_day(self, vajd, vlat, vlon)); double ajd = NUM2DBL(vajd); if (st < nt){ st += 24.0; } stajd = floor(ajd) - 0.5 + st / 24.0; vst = DBL2NUM(stajd); //VALUE date = rb_sprintf("Sun set: %2.0f:%02.0f UTC\n", //floor(st), floor(fmod(st, 1.0) * 60.0)); return func_ajd_2_datetime(self, vst); } |
#date('yyyy-mm-dd') ⇒ Object
convert input string to DateTime object.
44 45 46 47 48 |
# File 'ext/calc_sun/calc_sun.c', line 44 static VALUE func_set_datetime(VALUE self, VALUE vdatetime){ VALUE cDateTime = rb_const_get(rb_cObject, rb_intern("DateTime")); VALUE vdate = rb_funcall(cDateTime, rb_intern("parse"), 1, vdatetime); return vdate; } |
#set_jd(vajd, vlat, vlon) ⇒ Object
477 478 479 480 481 482 483 484 485 486 487 |
# File 'ext/calc_sun/calc_sun.c', line 477 static VALUE func_set_jd(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double stajd; double st = NUM2DBL(func_t_set(self, vajd, vlat, vlon)); double nt = NUM2DBL(func_t_mid_day(self, vajd, vlat, vlon)); double ajd = NUM2DBL(vajd); if (st < nt){ st += 24.0; } stajd = floor(ajd) - 0.5 + st / 24.0; return DBL2NUM(stajd); } |
#t_mid_day(vajd, vlat, vlon) ⇒ Object
416 417 418 419 |
# File 'ext/calc_sun/calc_sun.c', line 416 static VALUE func_t_mid_day(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double ts = NUM2DBL(func_t_south(self, vajd, vlon)); return DBL2NUM(fmod(roundf(ts * RND12) / RND12, 24.0)); } |
#t_rise(vajd, vlat, vlon) ⇒ Object
return DBL2NUM(lst - ra);
410 411 412 413 414 |
# File 'ext/calc_sun/calc_sun.c', line 410 static VALUE func_t_rise(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double ts = NUM2DBL(func_t_south(self, vajd, vlon)); double da = NUM2DBL(func_diurnal_arc(self, vajd, vlat)); return DBL2NUM(fmod(roundf((ts - da) * RND12) / RND12, 24.0)); } |
#t_set(vajd, vlat, vlon) ⇒ Object
421 422 423 424 425 |
# File 'ext/calc_sun/calc_sun.c', line 421 static VALUE func_t_set(VALUE self, VALUE vajd, VALUE vlat, VALUE vlon){ double ts = NUM2DBL(func_t_south(self, vajd, vlon)); double da = NUM2DBL(func_diurnal_arc(self, vajd, vlat)); return DBL2NUM(roundf(fmod((ts + da), 24.0) * RND12) / RND12); } |
#t_south(vajd, vlon) ⇒ Object
398 399 400 401 402 403 404 405 406 407 408 |
# File 'ext/calc_sun/calc_sun.c', line 398 static VALUE func_t_south(VALUE self, VALUE vajd, VALUE vlon){ double jd = floor(NUM2DBL(vajd)); double lst = NUM2DBL(func_local_sidetime(self, DBL2NUM(jd), vlon)); double ra = NUM2DBL(func_right_ascension(self, DBL2NUM(jd))); double vx = lst - ra; double vt = vx - 24.0 * floor(vx * INV24 + 0.5); //printf("%f", jd); return DBL2NUM(fmod(roundf((12.0 - vt) * RND12) / RND12, 24.0)); //return DBL2NUM(fmod(-vx, 24.0)); //return DBL2NUM(lst - ra); } |
#true_anomaly(vajd) ⇒ Object
153 154 155 156 157 158 159 160 |
# File 'ext/calc_sun/calc_sun.c', line 153 static VALUE func_true_anomaly(VALUE self, VALUE vajd){ double vma = NUM2DBL(func_mean_anomaly(self, vajd)); double veoc = NUM2DBL(func_equation_of_center(self, vajd)); double vta = vma + veoc; return DBL2NUM(roundf(vta * RND12) / RND12); } |
#true_anomaly1(vajd) ⇒ Object
221 222 223 224 225 226 |
# File 'ext/calc_sun/calc_sun.c', line 221 static VALUE func_true_anomaly1(VALUE self, VALUE vajd){ double xv = NUM2DBL(func_xv(self, vajd)); double yv = NUM2DBL(func_yv(self, vajd)); double vta = anp(atan2(yv, xv)); return DBL2NUM(roundf(vta * RND12) / RND12); } |
#true_longitude(vajd) ⇒ Object
228 229 230 231 232 233 234 235 236 |
# File 'ext/calc_sun/calc_sun.c', line 228 static VALUE func_true_longitude(VALUE self, VALUE vajd){ double vta = NUM2DBL(func_true_anomaly(self, vajd)); double vlop = NUM2DBL(func_longitude_of_perihelion(self, vajd)); double vtl = fmod(vta + vlop, M2PI); return DBL2NUM(roundf(vtl * RND12) / RND12); } |
#xv(vajd) ⇒ Object
202 203 204 205 206 207 208 209 |
# File 'ext/calc_sun/calc_sun.c', line 202 static VALUE func_xv(VALUE self, VALUE vajd){ double vea = NUM2DBL(func_eccentric_anomaly(self, vajd)); double ve = NUM2DBL(func_eccentricity(self, vajd)); double vxv = cos(vea) - ve; return DBL2NUM(roundf(vxv * RND12) / RND12); } |
#yv(vajd) ⇒ Object
211 212 213 214 215 216 217 218 219 |
# File 'ext/calc_sun/calc_sun.c', line 211 static VALUE func_yv(VALUE self, VALUE vajd){ double vea = NUM2DBL(func_eccentric_anomaly(self, vajd)); double ve = NUM2DBL(func_eccentricity(self, vajd)); double vyv = sqrt(1.0 - ve * ve) * sin(vea); return DBL2NUM(roundf(vyv * RND12) / RND12); } |