36 #ifndef GEOTESSUTILS_OBJECT_H
37 #define GEOTESSUTILS_OBJECT_H
112 {
return "GeoTessUtils"; }
134 static double dot(
const double*
const v0,
const double*
const v1)
135 {
return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2]; }
147 const double*
const v1,
const double*
const v2)
149 return v0[0] * v1[1] * v2[2] + v1[0] * v2[1] * v0[2]
150 + v2[0] * v0[1] * v1[2] - v2[0] * v1[1] * v0[2]
151 - v0[0] * v2[1] * v1[2] - v1[0] * v0[1] * v2[2];
161 static double getGeocentricLat(
const double& lat);
170 static double getGeographicLat(
const double& lat);
182 static double getGeoCentricLatitude(
const double& lat) {
return getGeocentricLat(lat); }
192 static double getGeoGraphicLatitude(
const double& lat) {
return getGeographicLat(lat); }
240 static double azimuth(
const double*
const v1,
const double*
const v2,
257 static void rotate(
const double*
const x,
const double*
const p,
double a,
283 const double*
const v1);
376 const double& delta,
const bool& onCenters);
392 const int& npoints,
const bool& onCenters,
double** points);
411 const double& delta,
const bool& onCenters,
double** points,
420 static double length(
const double*
const u)
422 double l = u[0] * u[0] + u[1] * u[1] + u[2] * u[2];
423 return l > 0 ? sqrt(l) : 0.;
457 double const*
const *
const t,
double*
const g)
459 g[0] = x[0] * t[0][0] + x[1] * t[0][1] + x[2] * t[0][2];
460 g[1] = x[0] * t[1][0] + x[1] * t[1][1] + x[2] * t[1][2];
461 g[2] = x[0] * t[2][0] + x[1] * t[2][1] + x[2] * t[2][2];
473 char* c =
new char[sze];
487 ofs.write(s.c_str(), s.length());
497 static double angle(
const double*
const v0,
498 const double*
const v1)
500 double dot = v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2];
516 const double*
const v1)
518 double dot = v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2];
523 return CPPUtils::toDegrees(acos(dot));
538 const double*
const v1,
double r1)
540 double v[3] = { v0[0] * r0 - v1[0] * r1, v0[1] * r0 - v1[1] * r1, v0[2] * r0
554 {
return EARTH_A / sqrt(1. + EARTH_E / (1 - EARTH_E) * v[2] * v[2]); }
563 static double getLat(
const double*
const v)
564 {
return getGeographicLat(asin(v[2])); }
572 static double getLon(
const double*
const v)
573 {
return atan2(v[1], v[0]); }
586 return CPPUtils::toDegrees(atan(tan(asin(v[2])) / 0.9933056199770992));
596 {
return CPPUtils::toDegrees(atan2(v[1], v[0])); }
612 {
return getVector(CPPUtils::toRadians(lat), CPPUtils::toRadians(lon)); }
626 const double& lon,
double* v)
627 {
return getVector(CPPUtils::toRadians(lat), CPPUtils::toRadians(lon), v); }
641 static double*
getVector(
const double& lat,
const double& lon)
643 double* v =
new double[3];
644 getVector(lat, lon, v);
659 static double*
getVector(
const double& lat,
const double& lon,
double* v)
662 double temp = getGeocentricLat(lat);
671 v[0] = temp * cos(lon);
672 v[1] = temp * sin(lon);
687 double len = u[0] * u[0] + u[1] * u[1] + u[2] * u[2];
703 double len = u[0] * u[0] + u[1] * u[1] + u[2] * u[2];
713 len = u[0] = u[1] = u[2] = 0.0;
728 static void cross(
const double*
const v1,
const double*
const v2,
731 rslt[0] = v1[1] * v2[2] - v1[2] * v2[1];
732 rslt[1] = v1[2] * v2[0] - v1[0] * v2[2];
733 rslt[2] = v1[0] * v2[1] - v1[1] * v2[0];
747 const double*
const v)
749 double* w =
new double[3];
750 w[0] = u[1] * v[2] - u[2] * v[1];
751 w[1] = u[2] * v[0] - u[0] * v[2];
752 w[2] = u[0] * v[1] - u[1] * v[0];
770 const double*
const v,
double*
const w)
772 w[0] = u[1] * v[2] - u[2] * v[1];
773 w[1] = u[2] * v[0] - u[0] * v[2];
774 w[2] = u[0] * v[1] - u[1] * v[0];
790 static double crossNorth(
const double*
const u,
double*
const w)
792 double len = u[0] * u[0] + u[1] * u[1];
795 len = w[0] = w[1] = w[2] = 0.;
823 const double*
const v1,
const double*
const v2,
double*
const rslt)
826 double q0 = v0[1] * v1[2] - v0[2] * v1[1];
827 double q1 = v0[2] * v1[0] - v0[0] * v1[2];
828 double q2 = v0[0] * v1[1] - v0[1] * v1[0];
831 double w0 = q1 * v2[2] - q2 * v2[1];
832 double w1 = q2 * v2[0] - q0 * v2[2];
833 double w2 = q0 * v2[1] - q1 * v2[0];
843 return normalize(rslt) != 0.;
861 w[2] = u[1] * u[1] + u[0] * u[0];
862 return normalize(w) != 0.;
876 const double*
const v1,
const double*
const v2,
double*
const vs)
878 vs[0] = v0[1] * (v2[2] - v1[2]) + v2[1] * (v1[2] - v0[2]) + v1[1] * (v0[2] - v2[2]);
879 vs[1] = v0[2] * (v2[0] - v1[0]) + v2[2] * (v1[0] - v0[0]) + v1[2] * (v0[0] - v2[0]);
880 vs[2] = v0[0] * (v2[1] - v1[1]) + v2[0] * (v1[1] - v0[1]) + v1[0] * (v0[1] - v2[1]);
881 double len = vs[0] * vs[0] + vs[1] * vs[1] + vs[2] * vs[2];
901 const double*
const v1,
const double*
const v2,
double*
const vs)
903 vs[0] = v0[1] * (v2[2] - v1[2]) + v2[1] * (v1[2] - v0[2]) + v1[1] * (v0[2] - v2[2]);
904 vs[1] = v0[2] * (v2[0] - v1[0]) + v2[2] * (v1[0] - v0[0]) + v1[2] * (v0[0] - v2[0]);
905 vs[2] = v0[0] * (v2[1] - v1[1]) + v2[0] * (v1[1] - v0[1]) + v1[0] * (v0[1] - v2[1]);
906 double len = vs[0] * vs[0] + vs[1] * vs[1] + vs[2] * vs[2];
930 const double*
const v1,
const double*
const v2)
932 double* vs =
new double[4];
933 vs[0] = v0[1] * (v2[2] - v1[2]) + v2[1] * (v1[2] - v0[2]) + v1[1] * (v0[2] - v2[2]);
934 vs[1] = v0[2] * (v2[0] - v1[0]) + v2[2] * (v1[0] - v0[0]) + v1[2] * (v0[0] - v2[0]);
935 vs[2] = v0[0] * (v2[1] - v1[1]) + v2[0] * (v1[1] - v0[1]) + v1[0] * (v0[1] - v2[1]);
936 double len = vs[0] * vs[0] + vs[1] * vs[1] + vs[2] * vs[2];
960 { circumCenterPlus(t[0], t[1], t[2], vs); }
977 static bool moveDistAz(
const double*
const w,
double distance,
978 double azimuth,
double*
const u)
980 double n[3] = { 0.0, 0.0, 0.0 };
981 if (moveNorth(w, distance, n))
983 rotate(n, w, azimuth, u);
1005 static void move(
const double*
const w,
const double*
const vtp,
1006 double a,
double*
const u)
1008 double cosa = cos(a);
1009 double sina = sin(a);
1010 u[0] = cosa * w[0] + sina * vtp[0];
1011 u[1] = cosa * w[1] + sina * vtp[1];
1012 u[2] = cosa * w[2] + sina * vtp[2];
1029 static bool moveNorth(
const double*
const x,
double distance,
1032 double vtp[3] = { 0.0, 0.0, 0.0 };
1033 if (vectorTripleProductNorthPole(x, vtp))
1035 move(x, vtp, distance, z);
1054 return (u[0] * u[0] + u[1] * u[1]) < 1.0e-15;
1066 static bool parallel(
const double*
const u,
const double*
const v)
1068 return 1.0 - abs(u[0] * v[0] + u[1] * v[1] + u[2] * v[2]) < 2.0e-15;
1088 double const*
const *
const greatCircle,
double distance)
1090 double* v =
new double[3];
1091 getGreatCirclePoint(greatCircle, distance, v);
1113 double const*
const *
const greatCircle,
double distance,
1116 double cosa = cos(distance);
1117 double sina = sin(distance);
1118 v[0] = cosa * greatCircle[0][0] + sina * greatCircle[1][0];
1119 v[1] = cosa * greatCircle[0][1] + sina * greatCircle[1][1];
1120 v[2] = cosa * greatCircle[0][2] + sina * greatCircle[1][2];
1130 const double*
const v1,
const double*
const v2)
1132 double v10[3] = { v1[0] - v0[0], v1[1] - v0[1], v1[2] - v0[2] };
1133 double v20[3] = { v2[0] - v0[0], v2[1] - v0[1], v2[2] - v0[2] };
1134 double u[3] = { v10[1] * v20[2] - v10[2] * v20[1], v10[2] * v20[0]
1135 - v10[0] * v20[2], v10[0] * v20[1] - v10[1] * v20[0] };
1136 return sqrt(u[0] * u[0] + u[1] * u[1] + u[2] * u[2]) / 2.;
1149 const double*
const v1,
const double*
const v2,
double* work1,
double* work2,
double* work3)
1151 work1[0] = v1[0] - v0[0];
1152 work1[1] = v1[1] - v0[1];
1153 work1[2] = v1[2] - v0[2];
1155 work2[0] = v2[0] - v0[0];
1156 work2[1] = v2[1] - v0[1];
1157 work2[2] = v2[2] - v0[2];
1159 work3[0] = work1[1] * work2[2] - work1[2] * work2[1];
1160 work3[1] = work1[2] * work2[0] - work1[0] * work2[2];
1161 work3[2] = work1[0] * work2[1] - work1[1] * work2[0];
1163 return sqrt(work3[0] * work3[0] + work3[1] * work3[1] + work3[2] * work3[2]) / 2.;
1173 static double*
center(
double const *
const *
const v,
int n)
1175 double* x =
new double[3];
1176 x[0] = x[1] = x[2] = 0.0;
1180 for (
int i = 0; i < n; ++i)
1197 static void center(vector<double*> v,
double* x)
1199 x[0] = x[1] = x[2] = 0.0;
1201 for (
size_t i = 0; i < v.size(); ++i)
1215 static const double geographic[] = {
1216 -1.5707963267948966,
1217 -1.5707963267948966, -1.5677489031921250, -1.5647014788238576, -1.5616540529246252,
1218 -1.5586066247290158, -1.5555591934716986, -1.5525117583874544, -1.5494643187112020,
1219 -1.5464168736780266, -1.5433694225232062, -1.5403219644822410, -1.5372744987908793,
1220 -1.5342270246851464, -1.5311795414013718, -1.5281320481762162, -1.5250845442467005,
1221 -1.5220370288502316, -1.5189895012246317, -1.5159419606081646, -1.5128944062395640,
1222 -1.5098468373580602, -1.5067992532034090, -1.5037516530159180, -1.5007040360364745,
1223 -1.4976564015065728, -1.4946087486683413, -1.4915610767645720, -1.4885133850387440,
1224 -1.4854656727350555, -1.4824179390984470, -1.4793701833746320, -1.4763224048101213,
1225 -1.4732746026522530, -1.4702267761492180, -1.4671789245500877, -1.4641310471048419,
1226 -1.4610831430643942, -1.4580352116806217, -1.4549872522063898, -1.4519392638955806,
1227 -1.4488912460031191, -1.4458431977850015, -1.4427951184983205, -1.4397470074012940,
1228 -1.4366988637532907, -1.4336506868148570, -1.4306024758477454, -1.4275542301149386,
1229 -1.4245059488806797, -1.4214576314104954, -1.4184092769712255, -1.4153608848310480,
1230 -1.4123124542595058, -1.4092639845275337, -1.4062154749074850, -1.4031669246731584,
1231 -1.4001183330998220, -1.3970696994642429, -1.3940210230447112, -1.3909723031210681,
1232 -1.3879235389747300, -1.3848747298887172, -1.3818258751476769, -1.3787769740379130,
1233 -1.3757280258474085, -1.3726790298658542, -1.3696299853846736, -1.3665808916970477,
1234 -1.3635317480979430, -1.3604825538841352, -1.3574333083542363, -1.3543840108087190,
1235 -1.3513346605499443, -1.3482852568821840, -1.3452357991116488, -1.3421862865465124,
1236 -1.3391367184969374, -1.3360870942751000, -1.3330374131952152, -1.3299876745735633,
1237 -1.3269378777285121, -1.3238880219805456, -1.3208381066522850, -1.3177881310685170,
1238 -1.3147380945562173, -1.3116879964445736, -1.3086378360650126, -1.3055876127512245,
1239 -1.3025373258391855, -1.2994869746671844, -1.2964365585758457, -1.2933860769081540,
1240 -1.2903355290094787, -1.2872849142275975, -1.2842342319127213, -1.2811834814175174,
1241 -1.2781326620971334, -1.2750817733092212, -1.2720308144139612, -1.2689797847740851,
1242 -1.2659286837548998, -1.2628775107243113, -1.2598262650528476, -1.2567749461136817,
1243 -1.2537235532826554, -1.2506720859383025, -1.2476205434618720, -1.2445689252373493,
1244 -1.2415172306514815, -1.2384654590937990, -1.2354136099566380, -1.2323616826351630,
1245 -1.2293096765273912, -1.2262575910342110, -1.2232054255594090, -1.2201531795096878,
1246 -1.2171008522946918, -1.2140484433270270, -1.2109959520222835, -1.2079433777990571,
1247 -1.2048907200789720, -1.2018379782867012, -1.1987851518499886, -1.1957322401996706,
1248 -1.1926792427696968, -1.1896261589971520, -1.1865729883222764, -1.1835197301884879,
1249 -1.1804663840424017, -1.1774129493338514, -1.1743594255159102, -1.1713058120449116,
1250 -1.1682521083804690, -1.1651983139854960, -1.1621444283262286, -1.1590904508722426,
1251 -1.1560363810964758, -1.1529822184752465, -1.1499279624882743, -1.1468736126186994,
1252 -1.1438191683531016, -1.1407646291815210, -1.1377099945974760, -1.1346552640979840,
1253 -1.1316004371835788, -1.1285455133583318, -1.1254904921298676, -1.1224353730093866,
1254 -1.1193801555116805, -1.1163248391551530, -1.1132694234618365, -1.1102139079574118,
1255 -1.1071582921712249, -1.1041025756363059, -1.1010467578893872, -1.0979908384709198,
1256 -1.0949348169250928, -1.0918786927998494, -1.0888224656469052, -1.0857661350217649,
1257 -1.0827097004837398, -1.0796531615959652, -1.0765965179254158, -1.0735397690429236,
1258 -1.0704829145231949, -1.0674259539448256, -1.0643688868903185, -1.0613117129460985,
1259 -1.0582544317025300, -1.0551970427539317, -1.0521395456985925, -1.0490819401387883,
1260 -1.0460242256807961, -1.0429664019349100, -1.0399084685154565, -1.0368504250408095,
1261 -1.0337922711334060, -1.0307340064197588, -1.0276756305304735, -1.0246171431002629,
1262 -1.0215585437679590, -1.0184998321765302, -1.0154410079730933, -1.0123820708089293,
1263 -1.0093230203394952, -1.0062638562244390, -1.0032045781276135, -1.0001451857170887,
1264 -0.9970856786651652, -0.9940260566483880, -0.9909663193475587, -0.9879064664477488,
1265 -0.9848464976383120, -0.9817864126128968, -0.9787262110694590, -0.9756658927102736,
1266 -0.9726054572419468, -0.9695449043754286, -0.9664842338260234, -0.9634234453134026,
1267 -0.9603625385616154, -0.9573015132991002, -0.9542403692586956, -0.9511791061776521,
1268 -0.9481177237976417, -0.9450562218647695, -0.9419946001295835, -0.9389328583470855,
1269 -0.9358709962767409, -0.9328090136824890, -0.9297469103327525, -0.9266846860004473,
1270 -0.9236223404629921, -0.9205598735023176, -0.9174972849048763, -0.9144345744616503,
1271 -0.9113717419681617, -0.9083087872244800, -0.9052457100352315, -0.9021825102096069,
1272 -0.8991191875613709, -0.8960557419088682, -0.8929921730750334, -0.8899284808873974,
1273 -0.8868646651780957, -0.8838007257838750, -0.8807366625461014, -0.8776724753107666,
1274 -0.8746081639284953, -0.8715437282545516, -0.8684791681488458, -0.8654144834759410,
1275 -0.8623496741050579, -0.8592847399100833, -0.8562196807695732, -0.8531544965667609,
1276 -0.8500891871895607, -0.8470237525305747, -0.8439581924870967, -0.8408925069611178,
1277 -0.8378266958593319, -0.8347607590931386, -0.8316946965786500, -0.8286285082366928,
1278 -0.8255621939928134, -0.8224957537772827, -0.8194291875250981, -0.8163624951759885,
1279 -0.8132956766744170, -0.8102287319695851, -0.8071616610154342, -0.8040944637706497,
1280 -0.8010271401986641, -0.7979596902676580, -0.7948921139505637, -0.7918244112250671,
1281 -0.7887565820736097, -0.7856886264833902, -0.7826205444463665, -0.7795523359592570,
1282 -0.7764840010235420, -0.7734155396454647, -0.7703469518360321, -0.7672782376110162,
1283 -0.7642093969909539, -0.7611404300011481, -0.7580713366716669, -0.7550021170373452,
1284 -0.7519327711377832, -0.7488632990173464, -0.7457937007251657, -0.7427239763151360,
1285 -0.7396541258459155, -0.7365841493809252, -0.7335140469883469, -0.7304438187411222,
1286 -0.7273734647169510, -0.7243029849982892, -0.7212323796723475, -0.7181616488310889,
1287 -0.7150907925712262, -0.7120198109942198, -0.7089487042062748, -0.7058774723183379,
1288 -0.7028061154460953, -0.6997346337099688, -0.6966630272351121, -0.6935912961514075,
1289 -0.6905194405934625, -0.6874474607006055, -0.6843753566168813, -0.6813031284910476,
1290 -0.6782307764765696, -0.6751583007316160, -0.6720857014190538, -0.6690129787064436,
1291 -0.6659401327660337, -0.6628671637747551, -0.6597940719142159, -0.6567208573706956,
1292 -0.6536475203351388, -0.6505740610031495, -0.6475004795749841, -0.6444267762555459,
1293 -0.6413529512543770, -0.6382790047856527, -0.6352049370681742, -0.6321307483253605,
1294 -0.6290564387852420, -0.6259820086804524, -0.6229074582482208, -0.6198327877303641,
1295 -0.6167579973732786, -0.6136830874279318, -0.6106080581498534, -0.6075329097991277,
1296 -0.6044576426403837, -0.6013822569427861, -0.5983067529800269, -0.5952311310303151,
1297 -0.5921553913763675, -0.5890795343053987, -0.5860035601091116, -0.5829274690836870,
1298 -0.5798512615297728, -0.5767749377524746, -0.5736984980613438, -0.5706219427703677,
1299 -0.5675452721979585, -0.5644684866669408, -0.5613915865045422, -0.5583145720423796,
1300 -0.5552374436164493, -0.5521602015671145, -0.5490828462390925, -0.5460053779814434,
1301 -0.5429277971475571, -0.5398501040951412, -0.5367722991862070, -0.5336943827870587,
1302 -0.5306163552682779, -0.5275382170047123, -0.5244599683754603, -0.5213816097638592,
1303 -0.5183031415574704, -0.5152245641480652, -0.5121458779316114, -0.5090670833082580,
1304 -0.5059881806823221, -0.5029091704622723, -0.4998300530607160, -0.4967508288943822,
1305 -0.4936714983841087, -0.4905920619548242, -0.4875125200355348, -0.4844328730593077,
1306 -0.4813531214632545, -0.4782732656885168, -0.4751933061802482, -0.4721132433875999,
1307 -0.4690330777637020, -0.4659528097656490, -0.4628724398544813, -0.4597919684951693,
1308 -0.4567113961565957, -0.4536307233115377, -0.4505499504366511, -0.4474690780124505,
1309 -0.4443881065232937, -0.4413070364573617, -0.4382258683066425, -0.4351446025669108,
1310 -0.4320632397377119, -0.4289817803223404, -0.4259002248278240, -0.4228185737649034,
1311 -0.4197368276480125, -0.4166549869952609, -0.4135730523284130, -0.4104910241728699,
1312 -0.4074089030576480, -0.4043266895153610, -0.4012443840821984, -0.3981619872979068,
1313 -0.3950794997057681, -0.3919969218525802, -0.3889142542886367, -0.3858314975677045,
1314 -0.3827486522470051, -0.3796657188871915, -0.3765826980523292, -0.3734995903098728,
1315 -0.3704163962306467, -0.3673331163888213, -0.3642497513618933, -0.3611663017306622,
1316 -0.3580827680792097, -0.3549991509948770, -0.3519154510682416, -0.3488316688930969,
1317 -0.3457478050664276, -0.3426638601883887, -0.3395798348622813, -0.3364957296945312,
1318 -0.3334115452946638, -0.3303272822752831, -0.3272429412520464, -0.3241585228436426,
1319 -0.3210740276717675, -0.3179894563610997, -0.3149048095392786, -0.3118200878368778,
1320 -0.3087352918873839, -0.3056504223271693, -0.3025654797954709, -0.2994804649343629,
1321 -0.2963953783887339, -0.2933102208062620, -0.2902249928373890, -0.2871396951352969,
1322 -0.2840543283558812, -0.2809688931577279, -0.2778833902020855, -0.2747978201528420,
1323 -0.2717121836764979, -0.2686264814421417, -0.2655407141214227, -0.2624548823885265,
1324 -0.2593689869201489, -0.2562830283954686, -0.2531970074961227, -0.2501109249061789,
1325 -0.2470247813121108, -0.2439385774027693, -0.2408523138693584, -0.2377659914054063,
1326 -0.2346796107067404, -0.2315931724714588, -0.2285066773999049, -0.2254201261946395,
1327 -0.2223335195604130, -0.2192468582041398, -0.2161601428348690, -0.2130733741637589,
1328 -0.2099865529040473, -0.2068996797710264, -0.2038127554820124, -0.2007257807563200,
1329 -0.1976387563152328, -0.1945516828819765, -0.1914645611816903, -0.1883773919413984,
1330 -0.1852901758899828, -0.1822029137581537, -0.1791156062784226, -0.1760282541850719,
1331 -0.1729408582141288, -0.1698534191033340, -0.1667659375921156, -0.1636784144215582,
1332 -0.1605908503343753, -0.1575032460748804, -0.1544156023889568, -0.1513279200240304,
1333 -0.1482401997290386, -0.1451524422544033, -0.1420646483519993, -0.1389768187751272,
1334 -0.1358889542784822, -0.1328010556181263, -0.1297131235514570, -0.1266251588371797,
1335 -0.1235371622352770, -0.1204491345069784, -0.1173610764147325, -0.1142729887221751,
1336 -0.1111848721941013, -0.1080967275964339, -0.1050085556961953, -0.1019203572614753,
1337 -0.0988321330614037, -0.0957438838661177, -0.0926556104467337, -0.0895673135753164,
1338 -0.0864789940248483, -0.0833906525692003, -0.0803022899831004, -0.0772139070421047,
1339 -0.0741255045225655, -0.0710370832016027, -0.0679486438570714, -0.0648601872675336,
1340 -0.0617717142122262, -0.0586832254710305, -0.0555947218244430, -0.0525062040535433,
1341 -0.0494176729399648, -0.0463291292658628, -0.0432405738138854, -0.0401520073671412,
1342 -0.0370634307091703, -0.0339748446239121, -0.0308862498956756, -0.0277976473091088,
1343 -0.0247090376491666, -0.0216204217010820, -0.0185318002503333, -0.0154431740826154,
1344 -0.0123545439838071, -0.0092659107399420, -0.0061772751371762, -0.0030886379617588,
1345 0.0000000000000000, 0.0030886379617588, 0.0061772751371762, 0.0092659107399420,
1346 0.0123545439838071, 0.0154431740826154, 0.0185318002503333, 0.0216204217010820,
1347 0.0247090376491666, 0.0277976473091088, 0.0308862498956756, 0.0339748446239121,
1348 0.0370634307091703, 0.0401520073671412, 0.0432405738138854, 0.0463291292658628,
1349 0.0494176729399648, 0.0525062040535433, 0.0555947218244430, 0.0586832254710305,
1350 0.0617717142122262, 0.0648601872675336, 0.0679486438570714, 0.0710370832016027,
1351 0.0741255045225655, 0.0772139070421047, 0.0803022899831004, 0.0833906525692003,
1352 0.0864789940248483, 0.0895673135753164, 0.0926556104467337, 0.0957438838661177,
1353 0.0988321330614037, 0.1019203572614753, 0.1050085556961953, 0.1080967275964339,
1354 0.1111848721941013, 0.1142729887221751, 0.1173610764147325, 0.1204491345069784,
1355 0.1235371622352770, 0.1266251588371797, 0.1297131235514570, 0.1328010556181263,
1356 0.1358889542784822, 0.1389768187751272, 0.1420646483519993, 0.1451524422544033,
1357 0.1482401997290386, 0.1513279200240304, 0.1544156023889568, 0.1575032460748804,
1358 0.1605908503343753, 0.1636784144215582, 0.1667659375921156, 0.1698534191033340,
1359 0.1729408582141288, 0.1760282541850719, 0.1791156062784226, 0.1822029137581537,
1360 0.1852901758899828, 0.1883773919413984, 0.1914645611816903, 0.1945516828819765,
1361 0.1976387563152328, 0.2007257807563200, 0.2038127554820124, 0.2068996797710264,
1362 0.2099865529040473, 0.2130733741637589, 0.2161601428348690, 0.2192468582041398,
1363 0.2223335195604130, 0.2254201261946395, 0.2285066773999049, 0.2315931724714588,
1364 0.2346796107067404, 0.2377659914054063, 0.2408523138693584, 0.2439385774027693,
1365 0.2470247813121108, 0.2501109249061789, 0.2531970074961227, 0.2562830283954686,
1366 0.2593689869201489, 0.2624548823885265, 0.2655407141214227, 0.2686264814421417,
1367 0.2717121836764979, 0.2747978201528420, 0.2778833902020855, 0.2809688931577279,
1368 0.2840543283558812, 0.2871396951352969, 0.2902249928373890, 0.2933102208062620,
1369 0.2963953783887339, 0.2994804649343629, 0.3025654797954709, 0.3056504223271693,
1370 0.3087352918873839, 0.3118200878368778, 0.3149048095392786, 0.3179894563610997,
1371 0.3210740276717675, 0.3241585228436426, 0.3272429412520464, 0.3303272822752831,
1372 0.3334115452946638, 0.3364957296945312, 0.3395798348622813, 0.3426638601883887,
1373 0.3457478050664276, 0.3488316688930969, 0.3519154510682416, 0.3549991509948770,
1374 0.3580827680792097, 0.3611663017306622, 0.3642497513618933, 0.3673331163888213,
1375 0.3704163962306467, 0.3734995903098728, 0.3765826980523292, 0.3796657188871915,
1376 0.3827486522470051, 0.3858314975677045, 0.3889142542886367, 0.3919969218525802,
1377 0.3950794997057681, 0.3981619872979068, 0.4012443840821984, 0.4043266895153610,
1378 0.4074089030576480, 0.4104910241728699, 0.4135730523284130, 0.4166549869952609,
1379 0.4197368276480125, 0.4228185737649034, 0.4259002248278240, 0.4289817803223404,
1380 0.4320632397377117, 0.4351446025669111, 0.4382258683066425, 0.4413070364573617,
1381 0.4443881065232935, 0.4474690780124507, 0.4505499504366511, 0.4536307233115377,
1382 0.4567113961565955, 0.4597919684951695, 0.4628724398544813, 0.4659528097656488,
1383 0.4690330777637022, 0.4721132433875999, 0.4751933061802482, 0.4782732656885166,
1384 0.4813531214632548, 0.4844328730593077, 0.4875125200355348, 0.4905920619548240,
1385 0.4936714983841087, 0.4967508288943822, 0.4998300530607158, 0.5029091704622726,
1386 0.5059881806823221, 0.5090670833082580, 0.5121458779316113, 0.5152245641480654,
1387 0.5183031415574704, 0.5213816097638592, 0.5244599683754600, 0.5275382170047123,
1388 0.5306163552682779, 0.5336943827870585, 0.5367722991862072, 0.5398501040951412,
1389 0.5429277971475571, 0.5460053779814433, 0.5490828462390928, 0.5521602015671145,
1390 0.5552374436164493, 0.5583145720423793, 0.5613915865045422, 0.5644684866669408,
1391 0.5675452721979584, 0.5706219427703679, 0.5736984980613438, 0.5767749377524745,
1392 0.5798512615297726, 0.5829274690836871, 0.5860035601091116, 0.5890795343053986,
1393 0.5921553913763673, 0.5952311310303152, 0.5983067529800269, 0.6013822569427860,
1394 0.6044576426403839, 0.6075329097991278, 0.6106080581498534, 0.6136830874279315,
1395 0.6167579973732787, 0.6198327877303641, 0.6229074582482207, 0.6259820086804526,
1396 0.6290564387852421, 0.6321307483253605, 0.6352049370681740, 0.6382790047856529,
1397 0.6413529512543770, 0.6444267762555458, 0.6475004795749840, 0.6505740610031496,
1398 0.6536475203351388, 0.6567208573706955, 0.6597940719142161, 0.6628671637747552,
1399 0.6659401327660337, 0.6690129787064435, 0.6720857014190540, 0.6751583007316160,
1400 0.6782307764765694, 0.6813031284910472, 0.6843753566168814, 0.6874474607006055,
1401 0.6905194405934625, 0.6935912961514077, 0.6966630272351122, 0.6997346337099688,
1402 0.7028061154460952, 0.7058774723183380, 0.7089487042062748, 0.7120198109942197,
1403 0.7150907925712261, 0.7181616488310891, 0.7212323796723475, 0.7243029849982890,
1404 0.7273734647169512, 0.7304438187411223, 0.7335140469883469, 0.7365841493809251,
1405 0.7396541258459156, 0.7427239763151360, 0.7457937007251656, 0.7488632990173463,
1406 0.7519327711377833, 0.7550021170373452, 0.7580713366716668, 0.7611404300011482,
1407 0.7642093969909540, 0.7672782376110162, 0.7703469518360320, 0.7734155396454648,
1408 0.7764840010235420, 0.7795523359592569, 0.7826205444463663, 0.7856886264833903,
1409 0.7887565820736097, 0.7918244112250670, 0.7948921139505639, 0.7979596902676581,
1410 0.8010271401986641, 0.8040944637706496, 0.8071616610154343, 0.8102287319695851,
1411 0.8132956766744170, 0.8163624951759882, 0.8194291875250982, 0.8224957537772827,
1412 0.8255621939928133, 0.8286285082366929, 0.8316946965786500, 0.8347607590931386,
1413 0.8378266958593317, 0.8408925069611180, 0.8439581924870967, 0.8470237525305746,
1414 0.8500891871895606, 0.8531544965667610, 0.8562196807695732, 0.8592847399100831,
1415 0.8623496741050583, 0.8654144834759411, 0.8684791681488458, 0.8715437282545514,
1416 0.8746081639284954, 0.8776724753107666, 0.8807366625461013, 0.8838007257838747,
1417 0.8868646651780958, 0.8899284808873974, 0.8929921730750333, 0.8960557419088684,
1418 0.8991191875613709, 0.9021825102096069, 0.9052457100352312, 0.9083087872244802,
1419 0.9113717419681617, 0.9144345744616502, 0.9174972849048760, 0.9205598735023178,
1420 0.9236223404629921, 0.9266846860004472, 0.9297469103327527, 0.9328090136824891,
1421 0.9358709962767409, 0.9389328583470853, 0.9419946001295836, 0.9450562218647695,
1422 0.9481177237976417, 0.9511791061776519, 0.9542403692586957, 0.9573015132991002,
1423 0.9603625385616152, 0.9634234453134028, 0.9664842338260234, 0.9695449043754285,
1424 0.9726054572419467, 0.9756658927102736, 0.9787262110694590, 0.9817864126128968,
1425 0.9848464976383122, 0.9879064664477489, 0.9909663193475587, 0.9940260566483880,
1426 0.9970856786651654, 1.0001451857170889, 1.0032045781276135, 1.0062638562244390,
1427 1.0093230203394952, 1.0123820708089293, 1.0154410079730933, 1.0184998321765304,
1428 1.0215585437679590, 1.0246171431002629, 1.0276756305304735, 1.0307340064197590,
1429 1.0337922711334060, 1.0368504250408095, 1.0399084685154563, 1.0429664019349100,
1430 1.0460242256807961, 1.0490819401387883, 1.0521395456985927, 1.0551970427539317,
1431 1.0582544317025300, 1.0613117129460985, 1.0643688868903185, 1.0674259539448256,
1432 1.0704829145231949, 1.0735397690429234, 1.0765965179254158, 1.0796531615959652,
1433 1.0827097004837398, 1.0857661350217650, 1.0888224656469052, 1.0918786927998494,
1434 1.0949348169250925, 1.0979908384709200, 1.1010467578893872, 1.1041025756363059,
1435 1.1071582921712246, 1.1102139079574118, 1.1132694234618365, 1.1163248391551530,
1436 1.1193801555116807, 1.1224353730093866, 1.1254904921298676, 1.1285455133583315,
1437 1.1316004371835790, 1.1346552640979840, 1.1377099945974760, 1.1407646291815206,
1438 1.1438191683531016, 1.1468736126186994, 1.1499279624882743, 1.1529822184752467,
1439 1.1560363810964758, 1.1590904508722426, 1.1621444283262283, 1.1651983139854962,
1440 1.1682521083804690, 1.1713058120449116, 1.1743594255159100, 1.1774129493338514,
1441 1.1804663840424017, 1.1835197301884879, 1.1865729883222769, 1.1896261589971520,
1442 1.1926792427696968, 1.1957322401996704, 1.1987851518499888, 1.2018379782867012,
1443 1.2048907200789720, 1.2079433777990570, 1.2109959520222835, 1.2140484433270270,
1444 1.2171008522946918, 1.2201531795096880, 1.2232054255594090, 1.2262575910342110,
1445 1.2293096765273910, 1.2323616826351633, 1.2354136099566380, 1.2384654590937990,
1446 1.2415172306514812, 1.2445689252373493, 1.2476205434618720, 1.2506720859383025,
1447 1.2537235532826556, 1.2567749461136817, 1.2598262650528476, 1.2628775107243113,
1448 1.2659286837549000, 1.2689797847740851, 1.2720308144139612, 1.2750817733092210,
1449 1.2781326620971334, 1.2811834814175174, 1.2842342319127213, 1.2872849142275977,
1450 1.2903355290094787, 1.2933860769081540, 1.2964365585758455, 1.2994869746671847,
1451 1.3025373258391855, 1.3055876127512245, 1.3086378360650124, 1.3116879964445736,
1452 1.3147380945562173, 1.3177881310685170, 1.3208381066522852, 1.3238880219805456,
1453 1.3269378777285121, 1.3299876745735630, 1.3330374131952154, 1.3360870942751000,
1454 1.3391367184969374, 1.3421862865465122, 1.3452357991116488, 1.3482852568821840,
1455 1.3513346605499441, 1.3543840108087193, 1.3574333083542363, 1.3604825538841352,
1456 1.3635317480979428, 1.3665808916970479, 1.3696299853846736, 1.3726790298658542,
1457 1.3757280258474083, 1.3787769740379130, 1.3818258751476769, 1.3848747298887170,
1458 1.3879235389747302, 1.3909723031210681, 1.3940210230447112, 1.3970696994642426,
1459 1.4001183330998221, 1.4031669246731584, 1.4062154749074850, 1.4092639845275339,
1460 1.4123124542595058, 1.4153608848310480, 1.4184092769712255, 1.4214576314104956,
1461 1.4245059488806797, 1.4275542301149386, 1.4306024758477451, 1.4336506868148573,
1462 1.4366988637532907, 1.4397470074012940, 1.4427951184983208, 1.4458431977850015,
1463 1.4488912460031191, 1.4519392638955804, 1.4549872522063900, 1.4580352116806217,
1464 1.4610831430643942, 1.4641310471048417, 1.4671789245500880, 1.4702267761492180,
1465 1.4732746026522530, 1.4763224048101216, 1.4793701833746320, 1.4824179390984470,
1466 1.4854656727350553, 1.4885133850387442, 1.4915610767645720, 1.4946087486683413,
1467 1.4976564015065725, 1.5007040360364747, 1.5037516530159180, 1.5067992532034090,
1468 1.5098468373580605, 1.5128944062395640, 1.5159419606081646, 1.5189895012246315,
1469 1.5220370288502318, 1.5250845442467005, 1.5281320481762162, 1.5311795414013716,
1470 1.5342270246851466, 1.5372744987908793, 1.5403219644822408, 1.5433694225232064,
1471 1.5464168736780266, 1.5494643187112020, 1.5525117583874541, 1.5555591934716988,
1472 1.5586066247290158, 1.5616540529246252, 1.5647014788238574, 1.5677489031921252,
1473 1.5707963267948966, 1.5707963267948966 };
1477 static const double geocentric[] = {
1478 -1.5707963267948966,
1479 -1.5707963267948966, -1.5677076888331378, -1.5646190516577203, -1.5615304160549546,
1480 -1.5584417828110895, -1.5553531527122813, -1.5522645265445634, -1.5491759050938145,
1481 -1.5460872891457300, -1.5429986794857877, -1.5399100768992209, -1.5368214821709845,
1482 -1.5337328960857262, -1.5306443194277555, -1.5275557529810110, -1.5244671975290338,
1483 -1.5213786538549317, -1.5182901227413532, -1.5152016049704535, -1.5121131013238660,
1484 -1.5090246125826705, -1.5059361395273627, -1.5028476829378250, -1.4997592435932938,
1485 -1.4966708222723310, -1.4935824197527918, -1.4904940368117963, -1.4874056742256963,
1486 -1.4843173327700483, -1.4812290132195800, -1.4781407163481628, -1.4750524429287788,
1487 -1.4719641937334929, -1.4688759695334213, -1.4657877710987013, -1.4626995991984626,
1488 -1.4596114546007952, -1.4565233380727216, -1.4534352503801642, -1.4503471922879183,
1489 -1.4472591645596196, -1.4441711679577170, -1.4410832032434395, -1.4379952711767703,
1490 -1.4349073725164143, -1.4318195080197693, -1.4287316784428974, -1.4256438845404933,
1491 -1.4225561270658580, -1.4194684067708663, -1.4163807244059399, -1.4132930807200161,
1492 -1.4102054764605212, -1.4071179123733384, -1.4040303892027810, -1.4009429076915625,
1493 -1.3978554685807678, -1.3947680726098246, -1.3916807205164740, -1.3885934130367428,
1494 -1.3855061509049138, -1.3824189348534980, -1.3793317656132063, -1.3762446439129201,
1495 -1.3731575704796637, -1.3700705460385765, -1.3669835713128842, -1.3638966470238703,
1496 -1.3608097738908493, -1.3577229526311376, -1.3546361839600276, -1.3515494685907568,
1497 -1.3484628072344835, -1.3453762006002570, -1.3422896493949916, -1.3392031543234377,
1498 -1.3361167160881562, -1.3330303353894903, -1.3299440129255382, -1.3268577493921272,
1499 -1.3237715454827859, -1.3206854018887175, -1.3175993192987738, -1.3145132983994277,
1500 -1.3114273398747476, -1.3083414444063700, -1.3052556126734738, -1.3021698453527548,
1501 -1.2990841431183986, -1.2959985066420545, -1.2929129365928111, -1.2898274336371687,
1502 -1.2867419984390154, -1.2836566316595996, -1.2805713339575073, -1.2774861059886347,
1503 -1.2744009484061627, -1.2713158618605336, -1.2682308469994257, -1.2651459044677273,
1504 -1.2620610349075128, -1.2589762389580188, -1.2558915172556180, -1.2528068704337967,
1505 -1.2497222991231292, -1.2466378039512538, -1.2435533855428500, -1.2404690445196138,
1506 -1.2373847815002328, -1.2343005971003653, -1.2312164919326152, -1.2281324666065077,
1507 -1.2250485217284690, -1.2219646579017995, -1.2188808757266550, -1.2157971758000197,
1508 -1.2127135587156865, -1.2096300250642344, -1.2065465754330034, -1.2034632104060754,
1509 -1.2003799305642500, -1.1972967364850238, -1.1942136287425673, -1.1911306079077050,
1510 -1.1880476745478916, -1.1849648292271922, -1.1818820725062600, -1.1787994049423160,
1511 -1.1757168270891285, -1.1726343394969900, -1.1695519427126981, -1.1664696372795356,
1512 -1.1633874237372486, -1.1603053026220267, -1.1572232744664834, -1.1541413397996356,
1513 -1.1510594991468840, -1.1479777530299930, -1.1448961019670723, -1.1418145464725562,
1514 -1.1387330870571848, -1.1356517242279858, -1.1325704584882540, -1.1294892903375349,
1515 -1.1264082202716028, -1.1233272487824462, -1.1202463763582455, -1.1171656034833588,
1516 -1.1140849306383010, -1.1110043582997270, -1.1079238869404153, -1.1048435170292479,
1517 -1.1017632490311946, -1.0986830834072967, -1.0956030206146483, -1.0925230611063799,
1518 -1.0894432053316420, -1.0863634537355888, -1.0832838067593618, -1.0802042648400725,
1519 -1.0771248284107880, -1.0740454979005143, -1.0709662737341807, -1.0678871563326242,
1520 -1.0648081461125745, -1.0617292434866386, -1.0586504488632850, -1.0555717626468313,
1521 -1.0524931852374262, -1.0494147170310375, -1.0463363584194363, -1.0432581097901843,
1522 -1.0401799715266187, -1.0371019440078382, -1.0340240276086896, -1.0309462226997554,
1523 -1.0278685296473395, -1.0247909488134530, -1.0217134805558040, -1.0186361252277820,
1524 -1.0155588831784472, -1.0124817547525171, -1.0094047402903543, -1.0063278401279556,
1525 -1.0032510545969382, -1.0001743840245287, -0.9970978287335528, -0.9940213890424220,
1526 -0.9909450652651237, -0.9878688577112096, -0.9847927666857850, -0.9817167924894978,
1527 -0.9786409354185291, -0.9755651957645814, -0.9724895738148697, -0.9694140698521104,
1528 -0.9663386841545130, -0.9632634169957689, -0.9601882686450431, -0.9571132393669648,
1529 -0.9540383294216180, -0.9509635390645325, -0.9478888685466756, -0.9448143181144442,
1530 -0.9417398880096545, -0.9386655784695360, -0.9355913897267224, -0.9325173220092438,
1531 -0.9294433755405196, -0.9263695505393507, -0.9232958472199123, -0.9202222657917470,
1532 -0.9171488064597577, -0.9140754694242008, -0.9110022548806807, -0.9079291630201415,
1533 -0.9048561940288629, -0.9017833480884530, -0.8987106253758427, -0.8956380260632806,
1534 -0.8925655503183270, -0.8894931983038491, -0.8864209701780152, -0.8833488660942911,
1535 -0.8802768862014340, -0.8772050306434891, -0.8741332995597845, -0.8710616930849278,
1536 -0.8679902113488013, -0.8649188544765588, -0.8618476225886219, -0.8587765158006768,
1537 -0.8557055342236701, -0.8526346779638075, -0.8495639471225490, -0.8464933417966074,
1538 -0.8434228620779456, -0.8403525080537744, -0.8372822798065497, -0.8342121774139714,
1539 -0.8311422009489811, -0.8280723504797606, -0.8250026260697307, -0.8219330277775502,
1540 -0.8188635556571134, -0.8157942097575512, -0.8127249901232296, -0.8096558967937485,
1541 -0.8065869298039426, -0.8035180891838803, -0.8004493749588645, -0.7973807871494317,
1542 -0.7943123257713546, -0.7912439908356396, -0.7881757823485300, -0.7851077003115063,
1543 -0.7820397447212868, -0.7789719155698294, -0.7759042128443329, -0.7728366365272386,
1544 -0.7697691865962324, -0.7667018630242468, -0.7636346657794624, -0.7605675948253116,
1545 -0.7575006501204794, -0.7544338316189082, -0.7513671392697986, -0.7483005730176139,
1546 -0.7452341328020831, -0.7421678185582038, -0.7391016302162466, -0.7360355677017578,
1547 -0.7329696309355647, -0.7299038198337787, -0.7268381343078000, -0.7237725742643218,
1548 -0.7207071396053357, -0.7176418302281357, -0.7145766460253233, -0.7115115868848132,
1549 -0.7084466526898385, -0.7053818433189556, -0.7023171586460507, -0.6992525985403449,
1550 -0.6961881628664013, -0.6931238514841299, -0.6900596642487952, -0.6869956010110216,
1551 -0.6839316616168009, -0.6808678459074992, -0.6778041537198631, -0.6747405848860284,
1552 -0.6716771392335258, -0.6686138165852896, -0.6655506167596651, -0.6624875395704165,
1553 -0.6594245848267348, -0.6563617523332462, -0.6532990418900204, -0.6502364532925790,
1554 -0.6471739863319046, -0.6441116407944493, -0.6410494164621440, -0.6379873131124075,
1555 -0.6349253305181557, -0.6318634684478110, -0.6288017266653131, -0.6257401049301271,
1556 -0.6226786029972549, -0.6196172206172444, -0.6165559575362010, -0.6134948134957965,
1557 -0.6104337882332812, -0.6073728814814939, -0.6043120929688732, -0.6012514224194678,
1558 -0.5981908695529498, -0.5951304340846230, -0.5920701157254376, -0.5890099141819997,
1559 -0.5859498291565846, -0.5828898603471477, -0.5798300074473378, -0.5767702701465086,
1560 -0.5737106481297314, -0.5706511410778079, -0.5675917486672830, -0.5645324705704574,
1561 -0.5614733064554015, -0.5584142559859673, -0.5553553188218032, -0.5522964946183664,
1562 -0.5492377830269375, -0.5461791836946337, -0.5431206962644228, -0.5400623203751378,
1563 -0.5370040556614907, -0.5339459017540870, -0.5308878582794401, -0.5278299248599867,
1564 -0.5247721011141006, -0.5217143866561084, -0.5186567810963040, -0.5155992840409649,
1565 -0.5125418950923666, -0.5094846138487980, -0.5064274399045782, -0.5033703728500708,
1566 -0.5003134122717017, -0.4972565577519730, -0.4941998088694810, -0.4911431651989314,
1567 -0.4880866263111567, -0.4850301917731316, -0.4819738611479913, -0.4789176339950472,
1568 -0.4758615098698037, -0.4728054883239767, -0.4697495689055093, -0.4666937511585906,
1569 -0.4636380346236717, -0.4605824188374848, -0.4575269033330600, -0.4544714876397434,
1570 -0.4514161712832160, -0.4483609537855100, -0.4453058346650290, -0.4422508134365649,
1571 -0.4391958896113176, -0.4361410626969126, -0.4330863321974207, -0.4300316976133757,
1572 -0.4269771584417951, -0.4239227141761973, -0.4208683643066221, -0.4178141083196501,
1573 -0.4147599456984207, -0.4117058759226540, -0.4086518984686680, -0.4055980128094006,
1574 -0.4025442184144278, -0.3994905147499850, -0.3964369012789863, -0.3933833774610454,
1575 -0.3903299427524949, -0.3872765966064085, -0.3842233384726200, -0.3811701677977445,
1576 -0.3781170840251998, -0.3750640865952259, -0.3720111749449079, -0.3689583485081953,
1577 -0.3659056067159246, -0.3628529489958394, -0.3598003747726132, -0.3567478834678695,
1578 -0.3536954745002046, -0.3506431472852087, -0.3475909012354876, -0.3445387357606854,
1579 -0.3414866502675054, -0.3384346441597333, -0.3353827168382586, -0.3323308677010977,
1580 -0.3292790961434151, -0.3262274015575475, -0.3231757833330247, -0.3201242408565939,
1581 -0.3170727735122413, -0.3140213806812149, -0.3109700617420491, -0.3079188160705851,
1582 -0.3048676430399968, -0.3018165420208114, -0.2987655123809355, -0.2957145534856753,
1583 -0.2926636646977631, -0.2896128453773791, -0.2865620948821750, -0.2835114125672991,
1584 -0.2804607977854179, -0.2774102498867426, -0.2743597682190509, -0.2713093521277122,
1585 -0.2682590009557110, -0.2652087140436722, -0.2621584907298840, -0.2591083303503231,
1586 -0.2560582322386794, -0.2530081957263792, -0.2499582201426115, -0.2469083048143511,
1587 -0.2438584490663844, -0.2408086522213333, -0.2377589135996813, -0.2347092325197966,
1588 -0.2316596082979593, -0.2286100402483842, -0.2255605276832478, -0.2225110699127127,
1589 -0.2194616662449523, -0.2164123159861774, -0.2133630184406603, -0.2103137729107614,
1590 -0.2072645786969535, -0.2042154350978488, -0.2011663414102229, -0.1981172969290423,
1591 -0.1950683009474881, -0.1920193527569836, -0.1889704516472197, -0.1859215969061795,
1592 -0.1828727878201665, -0.1798240236738284, -0.1767753037501854, -0.1737266273306537,
1593 -0.1706779936950747, -0.1676294021217382, -0.1645808518874114, -0.1615323422673629,
1594 -0.1584838725353908, -0.1554354419638487, -0.1523870498236709, -0.1493386953844011,
1595 -0.1462903779142168, -0.1432420966799579, -0.1401938509471512, -0.1371456399800395,
1596 -0.1340974630416059, -0.1310493193936025, -0.1280012082965759, -0.1249531290098951,
1597 -0.1219050807917775, -0.1188570628993160, -0.1158090745885068, -0.1127611151142748,
1598 -0.1097131837305024, -0.1066652796900548, -0.1036174022448089, -0.1005695506456786,
1599 -0.0975217241426437, -0.0944739219847753, -0.0914261434202646, -0.0883783876964495,
1600 -0.0853306540598411, -0.0822829417561525, -0.0792352500303247, -0.0761875781265552,
1601 -0.0731399252883239, -0.0700922907584221, -0.0670446737789784, -0.0639970735914873,
1602 -0.0609494894368364, -0.0579019205553327, -0.0548543661867321, -0.0518068255702648,
1603 -0.0487592979446650, -0.0457117825481961, -0.0426642786186804, -0.0396167853935248,
1604 -0.0365693021097503, -0.0335218280040174, -0.0304743623126556, -0.0274269042716904,
1605 -0.0243794531168700, -0.0213320080836945, -0.0182845684074421, -0.0152371333231980,
1606 -0.0121897020658807, -0.0091422738702712, -0.0060948479710391, -0.0030474236027716,
1607 0.0000000000000000, 0.0030474236027716, 0.0060948479710391, 0.0091422738702712,
1608 0.0121897020658807, 0.0152371333231980, 0.0182845684074421, 0.0213320080836945,
1609 0.0243794531168700, 0.0274269042716904, 0.0304743623126556, 0.0335218280040174,
1610 0.0365693021097503, 0.0396167853935248, 0.0426642786186804, 0.0457117825481961,
1611 0.0487592979446650, 0.0518068255702648, 0.0548543661867321, 0.0579019205553327,
1612 0.0609494894368364, 0.0639970735914873, 0.0670446737789784, 0.0700922907584221,
1613 0.0731399252883239, 0.0761875781265552, 0.0792352500303247, 0.0822829417561525,
1614 0.0853306540598411, 0.0883783876964495, 0.0914261434202646, 0.0944739219847753,
1615 0.0975217241426437, 0.1005695506456786, 0.1036174022448089, 0.1066652796900548,
1616 0.1097131837305024, 0.1127611151142748, 0.1158090745885068, 0.1188570628993160,
1617 0.1219050807917775, 0.1249531290098951, 0.1280012082965759, 0.1310493193936025,
1618 0.1340974630416059, 0.1371456399800395, 0.1401938509471512, 0.1432420966799579,
1619 0.1462903779142168, 0.1493386953844011, 0.1523870498236709, 0.1554354419638487,
1620 0.1584838725353908, 0.1615323422673629, 0.1645808518874114, 0.1676294021217382,
1621 0.1706779936950747, 0.1737266273306537, 0.1767753037501854, 0.1798240236738284,
1622 0.1828727878201665, 0.1859215969061795, 0.1889704516472197, 0.1920193527569836,
1623 0.1950683009474881, 0.1981172969290423, 0.2011663414102229, 0.2042154350978488,
1624 0.2072645786969535, 0.2103137729107614, 0.2133630184406603, 0.2164123159861774,
1625 0.2194616662449523, 0.2225110699127127, 0.2255605276832478, 0.2286100402483842,
1626 0.2316596082979593, 0.2347092325197966, 0.2377589135996813, 0.2408086522213333,
1627 0.2438584490663844, 0.2469083048143511, 0.2499582201426115, 0.2530081957263792,
1628 0.2560582322386794, 0.2591083303503231, 0.2621584907298840, 0.2652087140436722,
1629 0.2682590009557110, 0.2713093521277122, 0.2743597682190509, 0.2774102498867426,
1630 0.2804607977854179, 0.2835114125672991, 0.2865620948821750, 0.2896128453773791,
1631 0.2926636646977631, 0.2957145534856753, 0.2987655123809355, 0.3018165420208114,
1632 0.3048676430399968, 0.3079188160705851, 0.3109700617420491, 0.3140213806812149,
1633 0.3170727735122413, 0.3201242408565939, 0.3231757833330247, 0.3262274015575475,
1634 0.3292790961434151, 0.3323308677010977, 0.3353827168382586, 0.3384346441597333,
1635 0.3414866502675054, 0.3445387357606854, 0.3475909012354876, 0.3506431472852087,
1636 0.3536954745002046, 0.3567478834678695, 0.3598003747726132, 0.3628529489958394,
1637 0.3659056067159246, 0.3689583485081953, 0.3720111749449079, 0.3750640865952259,
1638 0.3781170840251998, 0.3811701677977445, 0.3842233384726200, 0.3872765966064085,
1639 0.3903299427524949, 0.3933833774610454, 0.3964369012789863, 0.3994905147499850,
1640 0.4025442184144278, 0.4055980128094006, 0.4086518984686680, 0.4117058759226540,
1641 0.4147599456984207, 0.4178141083196501, 0.4208683643066221, 0.4239227141761973,
1642 0.4269771584417949, 0.4300316976133759, 0.4330863321974207, 0.4361410626969126,
1643 0.4391958896113174, 0.4422508134365651, 0.4453058346650290, 0.4483609537855100,
1644 0.4514161712832158, 0.4544714876397437, 0.4575269033330600, 0.4605824188374846,
1645 0.4636380346236719, 0.4666937511585906, 0.4697495689055093, 0.4728054883239765,
1646 0.4758615098698039, 0.4789176339950472, 0.4819738611479913, 0.4850301917731313,
1647 0.4880866263111567, 0.4911431651989314, 0.4941998088694807, 0.4972565577519732,
1648 0.5003134122717017, 0.5033703728500708, 0.5064274399045780, 0.5094846138487981,
1649 0.5125418950923666, 0.5155992840409649, 0.5186567810963038, 0.5217143866561084,
1650 0.5247721011141006, 0.5278299248599865, 0.5308878582794403, 0.5339459017540870,
1651 0.5370040556614907, 0.5400623203751377, 0.5431206962644230, 0.5461791836946337,
1652 0.5492377830269375, 0.5522964946183662, 0.5553553188218032, 0.5584142559859673,
1653 0.5614733064554014, 0.5645324705704576, 0.5675917486672830, 0.5706511410778078,
1654 0.5737106481297312, 0.5767702701465087, 0.5798300074473378, 0.5828898603471476,
1655 0.5859498291565843, 0.5890099141819998, 0.5920701157254376, 0.5951304340846229,
1656 0.5981908695529500, 0.6012514224194680, 0.6043120929688731, 0.6073728814814937,
1657 0.6104337882332813, 0.6134948134957965, 0.6165559575362007, 0.6196172206172447,
1658 0.6226786029972549, 0.6257401049301271, 0.6288017266653130, 0.6318634684478113,
1659 0.6349253305181557, 0.6379873131124074, 0.6410494164621438, 0.6441116407944494,
1660 0.6471739863319046, 0.6502364532925788, 0.6532990418900205, 0.6563617523332463,
1661 0.6594245848267348, 0.6624875395704165, 0.6655506167596653, 0.6686138165852896,
1662 0.6716771392335257, 0.6747405848860282, 0.6778041537198634, 0.6808678459074992,
1663 0.6839316616168007, 0.6869956010110218, 0.6900596642487954, 0.6931238514841299,
1664 0.6961881628664012, 0.6992525985403450, 0.7023171586460507, 0.7053818433189555,
1665 0.7084466526898383, 0.7115115868848134, 0.7145766460253233, 0.7176418302281355,
1666 0.7207071396053360, 0.7237725742643220, 0.7268381343078000, 0.7299038198337786,
1667 0.7329696309355649, 0.7360355677017578, 0.7391016302162465, 0.7421678185582037,
1668 0.7452341328020832, 0.7483005730176139, 0.7513671392697985, 0.7544338316189083,
1669 0.7575006501204795, 0.7605675948253116, 0.7636346657794623, 0.7667018630242469,
1670 0.7697691865962324, 0.7728366365272384, 0.7759042128443326, 0.7789719155698295,
1671 0.7820397447212868, 0.7851077003115062, 0.7881757823485303, 0.7912439908356397,
1672 0.7943123257713546, 0.7973807871494316, 0.8004493749588646, 0.8035180891838803,
1673 0.8065869298039425, 0.8096558967937484, 0.8127249901232297, 0.8157942097575512,
1674 0.8188635556571133, 0.8219330277775504, 0.8250026260697310, 0.8280723504797606,
1675 0.8311422009489808, 0.8342121774139715, 0.8372822798065497, 0.8403525080537743,
1676 0.8434228620779455, 0.8464933417966075, 0.8495639471225490, 0.8526346779638074,
1677 0.8557055342236705, 0.8587765158006768, 0.8618476225886219, 0.8649188544765586,
1678 0.8679902113488013, 0.8710616930849278, 0.8741332995597844, 0.8772050306434889,
1679 0.8802768862014341, 0.8833488660942911, 0.8864209701780152, 0.8894931983038492,
1680 0.8925655503183271, 0.8956380260632806, 0.8987106253758426, 0.9017833480884531,
1681 0.9048561940288629, 0.9079291630201414, 0.9110022548806804, 0.9140754694242010,
1682 0.9171488064597577, 0.9202222657917469, 0.9232958472199125, 0.9263695505393509,
1683 0.9294433755405196, 0.9325173220092435, 0.9355913897267225, 0.9386655784695360,
1684 0.9417398880096545, 0.9448143181144439, 0.9478888685466759, 0.9509635390645325,
1685 0.9540383294216178, 0.9571132393669650, 0.9601882686450431, 0.9632634169957687,
1686 0.9663386841545127, 0.9694140698521105, 0.9724895738148697, 0.9755651957645813,
1687 0.9786409354185294, 0.9817167924894980, 0.9847927666857850, 0.9878688577112096,
1688 0.9909450652651239, 0.9940213890424222, 0.9970978287335528, 1.0001743840245285,
1689 1.0032510545969382, 1.0063278401279556, 1.0094047402903543, 1.0124817547525173,
1690 1.0155588831784472, 1.0186361252277820, 1.0217134805558040, 1.0247909488134532,
1691 1.0278685296473395, 1.0309462226997554, 1.0340240276086894, 1.0371019440078382,
1692 1.0401799715266187, 1.0432581097901843, 1.0463363584194365, 1.0494147170310375,
1693 1.0524931852374262, 1.0555717626468313, 1.0586504488632853, 1.0617292434866386,
1694 1.0648081461125745, 1.0678871563326240, 1.0709662737341807, 1.0740454979005143,
1695 1.0771248284107880, 1.0802042648400727, 1.0832838067593618, 1.0863634537355888,
1696 1.0894432053316419, 1.0925230611063800, 1.0956030206146483, 1.0986830834072967,
1697 1.1017632490311944, 1.1048435170292479, 1.1079238869404153, 1.1110043582997270,
1698 1.1140849306383012, 1.1171656034833588, 1.1202463763582455, 1.1233272487824457,
1699 1.1264082202716030, 1.1294892903375349, 1.1325704584882540, 1.1356517242279855,
1700 1.1387330870571848, 1.1418145464725562, 1.1448961019670723, 1.1479777530299933,
1701 1.1510594991468840, 1.1541413397996356, 1.1572232744664834, 1.1603053026220270,
1702 1.1633874237372486, 1.1664696372795356, 1.1695519427126980, 1.1726343394969900,
1703 1.1757168270891285, 1.1787994049423160, 1.1818820725062600, 1.1849648292271922,
1704 1.1880476745478916, 1.1911306079077049, 1.1942136287425678, 1.1972967364850238,
1705 1.2003799305642500, 1.2034632104060752, 1.2065465754330034, 1.2096300250642344,
1706 1.2127135587156865, 1.2157971758000200, 1.2188808757266550, 1.2219646579017995,
1707 1.2250485217284688, 1.2281324666065080, 1.2312164919326152, 1.2343005971003653,
1708 1.2373847815002326, 1.2404690445196138, 1.2435533855428500, 1.2466378039512538,
1709 1.2497222991231294, 1.2528068704337967, 1.2558915172556180, 1.2589762389580186,
1710 1.2620610349075130, 1.2651459044677273, 1.2682308469994257, 1.2713158618605336,
1711 1.2744009484061627, 1.2774861059886347, 1.2805713339575073, 1.2836566316595999,
1712 1.2867419984390154, 1.2898274336371687, 1.2929129365928110, 1.2959985066420547,
1713 1.2990841431183986, 1.3021698453527548, 1.3052556126734736, 1.3083414444063700,
1714 1.3114273398747476, 1.3145132983994277, 1.3175993192987740, 1.3206854018887175,
1715 1.3237715454827859, 1.3268577493921270, 1.3299440129255384, 1.3330303353894903,
1716 1.3361167160881562, 1.3392031543234375, 1.3422896493949916, 1.3453762006002570,
1717 1.3484628072344833, 1.3515494685907570, 1.3546361839600276, 1.3577229526311376,
1718 1.3608097738908491, 1.3638966470238705, 1.3669835713128842, 1.3700705460385765,
1719 1.3731575704796635, 1.3762446439129201, 1.3793317656132063, 1.3824189348534979,
1720 1.3855061509049140, 1.3885934130367428, 1.3916807205164740, 1.3947680726098244,
1721 1.3978554685807680, 1.4009429076915625, 1.4040303892027810, 1.4071179123733386,
1722 1.4102054764605212, 1.4132930807200161, 1.4163807244059394, 1.4194684067708665,
1723 1.4225561270658580, 1.4256438845404933, 1.4287316784428970, 1.4318195080197695,
1724 1.4349073725164143, 1.4379952711767703, 1.4410832032434397, 1.4441711679577170,
1725 1.4472591645596196, 1.4503471922879179, 1.4534352503801644, 1.4565233380727216,
1726 1.4596114546007952, 1.4626995991984624, 1.4657877710987015, 1.4688759695334213,
1727 1.4719641937334929, 1.4750524429287790, 1.4781407163481628, 1.4812290132195800,
1728 1.4843173327700480, 1.4874056742256965, 1.4904940368117963, 1.4935824197527918,
1729 1.4966708222723308, 1.4997592435932940, 1.5028476829378250, 1.5059361395273627,
1730 1.5090246125826707, 1.5121131013238660, 1.5152016049704535, 1.5182901227413530,
1731 1.5213786538549319, 1.5244671975290338, 1.5275557529810110, 1.5306443194277553,
1732 1.5337328960857264, 1.5368214821709845, 1.5399100768992207, 1.5429986794857880,
1733 1.5460872891457300, 1.5491759050938145, 1.5522645265445632, 1.5553531527122815,
1734 1.5584417828110895, 1.5615304160549546, 1.5646190516577200, 1.5677076888331380,
1735 1.5707963267948966, 1.5707963267948966 };
1742 static const double GEOTESS_DLAT = PI/1024.;
1744 static const double GEOTESS_LAT0 = -PI/2. - GEOTESS_DLAT;
1747 static const double GEOTESS_E = 0.99330562000985870000;
1749 inline double GeoTessUtils::getGeographicLat(
const double& lat)
1752 if (approximateLatitudes)
1754 double tmp = (lat - GEOTESS_LAT0) / GEOTESS_DLAT;
1756 return geographic[i] + (tmp - i) * (geographic[i + 1] - geographic[i]);
1758 return atan(tan(lat) / GEOTESS_E);
1761 inline double GeoTessUtils::getGeocentricLat(
const double& lat)
1764 if (approximateLatitudes)
1766 double tmp = (lat - GEOTESS_LAT0) / GEOTESS_DLAT;
1768 return geocentric[i] + (tmp - i) * (geocentric[i + 1] - geocentric[i]);
1770 return atan(tan(lat) * GEOTESS_E);
Collection of static functions to manipulate geographic information.
static double getLat(const double *const v)
static void getGreatCirclePoint(double const *const *const greatCircle, double distance, double *const v)
static double azimuthDegrees(const double *const v1, const double *const v2, double errorValue)
static void center(vector< double * > v, double *x)
static void getGreatCircle(const double *const v, double azimuth, double **const gc)
static void cross(const double *const v1, const double *const v2, double *const rslt)
static double getGreatCirclePoints(double *ptA, double *ptB, const double &delta, const bool &onCenters, double **points, int &npoints)
static double angle(const double *const v0, const double *const v1)
static double dot(const double *const v0, const double *const v1)
static double getLonDegrees(const double *const v)
static bool isPole(const double *const u)
static void getTransform(const double *const u, const double *const v, double **const t)
static double * circumCenterPlus(const double *const v0, const double *const v1, const double *const v2)
static double crossNormal(const double *const u, const double *const v, double *const w)
static void circumCenterPlus(double const *const *const t, double *const vs)
static int getGreatCirclePoints(double *ptA, double *ptB, const double &delta, const bool &onCenters)
static void readString(string &s, ifstream &ifs)
static void circumCenter(const double *const v0, const double *const v1, const double *const v2, double *const vs)
static double * getGreatCirclePoint(double const *const *const greatCircle, double distance)
static bool approximateLatitudes
static double getTriangleArea(const double *const v0, const double *const v1, const double *const v2)
static double crossNorth(const double *const u, double *const w)
static double * center(double const *const *const v, int n)
static double getEarthRadius(const double *const v)
static void transform(const double *x, double const *const *const t, double *const g)
static double length(const double *const u)
static string class_name()
static double * getVectorDegrees(const double &lat, const double &lon, double *v)
static void getGreatCircle(const double *const v0, const double *const v1, double **const gc)
static double ** getGreatCircle(const double *const v, double azimuth)
static string getLatLonString(const double *const v)
static void rotate(const double *const x, const double *const p, double a, double *const z)
static double getLon(const double *const v)
static string getLonLatString(const double *const v)
static double * getVector(const double &lat, const double &lon)
static double getGreatCirclePoints(double *ptA, double *ptB, const int &npoints, const bool &onCenters, double **points)
static bool vectorTripleProduct(const double *const v0, const double *const v1, const double *const v2, double *const rslt)
static bool parallel(const double *const u, const double *const v)
static double getDistance3D(const double *const v0, double r0, const double *const v1, double r1)
static bool vectorTripleProductNorthPole(const double *const u, double *const w)
static double ** getGreatCircle(const double *const v0, const double *const v1)
static double getLatDegrees(const double *const v)
static double * getVectorDegrees(const double &lat, const double &lon)
static void normalizeFast(double *const u)
static void move(const double *const w, const double *const vtp, double a, double *const u)
static double azimuth(const double *const v1, const double *const v2, double errorValue)
static double getTriangleArea(const double *const v0, const double *const v1, const double *const v2, double *work1, double *work2, double *work3)
static void circumCenterPlus(const double *const v0, const double *const v1, const double *const v2, double *const vs)
static bool moveNorth(const double *const x, double distance, double *const z)
static string getVersion()
virtual int class_size() const
static double * crossNormal(const double *const u, const double *const v)
static double scalarTripleProduct(const double *const v0, const double *const v1, const double *const v2)
static bool moveDistAz(const double *const w, double distance, double azimuth, double *const u)
static double * getVector(const double &lat, const double &lon, double *v)
static double normalize(double *const u)
static double angleDegrees(const double *const v0, const double *const v1)
static void writeString(ofstream &ofs, const string &s)