void Spice::ComputeSolarLongitude(double et) { NaifStatus::CheckErrors(); if (iString(Target()).UpCase() == "SKY") { p_solarLongitude = -999.0; return; } if (p_bodyRotation->IsCached()) return; double tipm[3][3], npole[3]; char frameName[32]; SpiceInt frameCode; SpiceBoolean found; cidfrm_c (p_spkBodyCode, sizeof(frameName), &frameCode, frameName, &found); if ( found ) { pxform_c("J2000",frameName,et,tipm); } else { tipbod_c("J2000",p_spkBodyCode,et,tipm); } for (int i=0; i<3; i++) { npole[i] = tipm[2][i]; } double state[6], lt; spkez_c(p_spkBodyCode,et,"J2000","NONE",10,state,<); double uavel[3]; ucrss_c(state,&state[3],uavel); double x[3], y[3], z[3]; vequ_c(uavel,z); ucrss_c(npole,z,x); ucrss_c(z,x,y); double trans[3][3]; for (int i=0; i<3; i++) { trans[0][i] = x[i]; trans[1][i] = y[i]; trans[2][i] = z[i]; } spkez_c(10,et,"J2000","LT+S",p_spkBodyCode,state,<); double pos[3]; mxv_c(trans,state,pos); double radius, ls, lat; reclat_c(pos,&radius,&ls,&lat); ls *= 180.0 / Isis::PI; if (ls < 0.0) ls += 360.0; else if (ls > 360.0) ls -= 360.0; p_solarLongitude = ls; NaifStatus::CheckErrors(); }
Vector3 Frame::TransformVector(const Vector3& vec, const Date& t, const Frame& ref) const { double transform[3][3]; CSPICE_ASSERT(pxform_c(GetSpiceName().c_str(), ref.GetSpiceName().c_str(), t.AsDouble(), transform)); double axisLocal[3] = {vec.x, vec.y, vec.z}; double axisGlobal[3]; CSPICE_ASSERT(mxv_c(transform, axisLocal, axisGlobal)); return Vector3(axisGlobal); }
/* Calculate transform matrix between frames */ char* pxform_custom(char* from, char* to, double et, double rotate[3][3]) { pxform_c(from, to, et, rotate); CHECK_EXCEPTION FINALIZE }
int main (int argc, char **argv) { SpiceDouble et, mat[3][3], mat2[3][3], jac[3][3], nut, obq, dboq; SpiceDouble pos[3], newpos[3]; SpiceDouble lt; SpiceInt planets[6], i; SPICEDOUBLE_CELL (range, 2); SpiceDouble beg,end,stime,etime,*array; char test2[2000]; furnsh_c("/home/barrycarter/BCGIT/ASTRO/standard.tm"); exit(-1); for (i=-20000; i<=20000; i++) { timout_c(year2et(i), "ERAYYYY##-MON-DD HR:MN:SC.############# ::MCAL", 50, test2); printf("TIME: %d %s\n", i, test2); } exit(-1); spkcov_c("/home/barrycarter/SPICE/KERNELS/de431_part-1.bsp", 399, &range); wnfetd_c (&range, 0, &stime, &end); spkcov_c("/home/barrycarter/SPICE/KERNELS/de431_part-2.bsp", 399, &range); wnfetd_c(&range, 0, &beg, &etime); printf("TIMES: %f %f\n", beg, etime); str2et_c("2017-10-17 07:59", &et); printf("ET: %f\n", et); spkezp_c(1, et, "EQEQDATE", "CN+S", 399, pos, <); printf("ET: %f\n", et); printf("POS: %f %f %f %f %f\n", et, pos[0], pos[1], pos[2], lt); // eqeq2eclip(et, mat, jac); mxv_c(mat, pos, newpos); printf("NEWPOS: %f %f %f\n", newpos[0], newpos[1], newpos[2]); exit(0); zzwahr_(&et, &nut); zzmobliq_(&et, &obq, &dboq); printf("NUTATION: %f\n", nut); printf("OBLIQUITY: %f\n", obq); pxform_c("EQEQDATE", "ECLIPDATE", et, mat); for (i=0; i<=2; i++) { printf("ALPHA: %d %f %f %f\n", i, mat[i][0], mat[i][1], mat[i][2]); } eqeq2eclip(et, mat2); printf("ALPHATEST\n"); for (i=0; i<=2; i++) { printf("BETA: %d %f %f %f\n", i, mat2[i][0], mat2[i][1], mat2[i][2]); } exit(0); str2et_c("10400-FEB-28 00:00:00", &et); printf("ET: %f\n", et); str2et_c("10400-MAR-01 00:00:00", &et); printf("ET: %f\n", et); exit(0); timout_c(0, "ERAYYYY##-MON-DD HR:MN:SC.############# ::MCAL", 41, test2); printf("%s\n", test2); exit(0); long long test = -pow(2,63); printf("TEST: %lld\n",test); exit(0); if (!strcmp(argv[1],"posxyz")) { double time = atof(argv[2]); int planet = atoi(argv[3]); posxyz(time,planet,pos); printf("%f -> %f %f %f\n",time,pos[0],pos[1],pos[2]); }; if (!strcmp(argv[1],"earthvector")) { double time = atof(argv[2]); int planet = atoi(argv[3]); earthvector(time,planet,pos); printf("%f -> %f %f %f\n",time,pos[0],pos[1],pos[2]); }; if (!strcmp(argv[1],"earthangle")) { double time = atof(argv[2]); int p1 = atoi(argv[3]); int p2 = atoi(argv[4]); SpiceDouble sep = earthangle(time,p1,p2); printf("%f -> %f\n",time,sep); }; if (!strcmp(argv[1],"earthmaxangle")) { double time = atof(argv[2]); for (i=3; i<argc; i++) {planets[i-3] = atoi(argv[i]);} SpiceDouble sep = earthmaxangle(time,argc-3,planets); printf("%f -> %f\n",time,sep); }; }