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); }
200 static string getLatLonString(
const double*
const v);
206 static string getLonLatString(
const double*
const v);
223 static double azimuthDegrees(
const double*
const v1,
const double*
const v2,
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,
282 static double** getGreatCircle(
const double*
const v0,
283 const double*
const v1);
307 static void getGreatCircle(
const double*
const v0,
const double*
const v1,
334 static double** getGreatCircle(
const double*
const v,
double azimuth);
360 static void getGreatCircle(
const double*
const v,
double azimuth,
375 static int getGreatCirclePoints(
double* ptA,
double* ptB,
376 const double& delta,
const bool& onCenters);
391 static double getGreatCirclePoints(
double* ptA,
double* ptB,
392 const int& npoints,
const bool& onCenters,
double** points);
410 static double getGreatCirclePoints(
double* ptA,
double* ptB,
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.;
438 static void getTransform(
const double*
const u,
const double*
const v,
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);
1775 #endif // GEOTESSUTILS_OBJECT_H
static double angleDegrees(const double *const v0, const double *const v1)
Return the angular distance in degrees between two unit vectors.
Definition: GeoTessUtils.h:515
virtual int class_size() const
Returns the class size.
Definition: GeoTessUtils.h:118
static double getLon(const double *const v)
Convert a 3-component unit vector to a longitude, in radians.
Definition: GeoTessUtils.h:572
static double getLat(const double *const v)
Convert a 3-component unit vector to geographic latitude, in radians.
Definition: GeoTessUtils.h:563
static double * circumCenterPlus(const double *const v0, const double *const v1, const double *const v2)
Given three unit vectors, v0, v1 and v2, find the circumcenter, vs.
Definition: GeoTessUtils.h:929
static void circumCenterPlus(double const *const *const t, double *const vs)
Given the three unit vectors, t[0], t[1] and t[2], find the circumcenter, vs.
Definition: GeoTessUtils.h:959
static double * getVector(const double &lat, const double &lon, double *v)
Convert geographic lat, lon into a geocentric unit vector.
Definition: GeoTessUtils.h:659
Definition: ArrayReuse.h:55
static bool isPole(const double *const u)
Returns true if unit vector u is very close to [0, 0, +/- 1].
Definition: GeoTessUtils.h:1052
static double * center(double const *const *const v, int n)
Return the normalized vector sum of the supplied unit vectors.
Definition: GeoTessUtils.h:1173
static double normalize(double *const u)
Normalize the input vector to unit length.
Definition: GeoTessUtils.h:701
static double crossNormal(const double *const u, const double *const v, double *const w)
Normalized cross product of two 3-component unit vectors.
Definition: GeoTessUtils.h:769
static double crossNorth(const double *const u, double *const w)
Normalized cross product of a 3-component unit vector with the north pole.
Definition: GeoTessUtils.h:790
static double getTriangleArea(const double *const v0, const double *const v1, const double *const v2, double *work1, double *work2, double *work3)
Definition: GeoTessUtils.h:1148
static void circumCenter(const double *const v0, const double *const v1, const double *const v2, double *const vs)
Given three unit vectors, v0, v1 and v2, find the circumcenter, vs.
Definition: GeoTessUtils.h:875
static void normalizeFast(double *const u)
Normalize the input vector to unit length.
Definition: GeoTessUtils.h:685
Collection of static functions to manipulate geographic information.
Definition: GeoTessUtils.h:69
static double * getVectorDegrees(const double &lat, const double &lon)
Convert geographic lat, lon into a geocentric unit vector.
Definition: GeoTessUtils.h:610
static bool moveDistAz(const double *const w, double distance, double azimuth, double *const u)
Move unit vector w specified distance in direction given by azimuth and return the result in u...
Definition: GeoTessUtils.h:977
static bool approximateLatitudes
If true, then an approximate algorithm will be used to convert back and forth between geocentric and ...
Definition: GeoTessUtils.h:95
static bool moveNorth(const double *const x, double distance, double *const z)
Return a unit vector that is distance radians due north of positon x.
Definition: GeoTessUtils.h:1029
static double getDistance3D(const double *const v0, double r0, const double *const v1, double r1)
Given two unit vectors and their radii, return the straight line separation between their tips...
Definition: GeoTessUtils.h:537
static void circumCenterPlus(const double *const v0, const double *const v1, const double *const v2, double *const vs)
Given three unit vectors, v0, v1 and v2, find the circumcenter, vs.
Definition: GeoTessUtils.h:900
static double dot(const double *const v0, const double *const v1)
Return the dot product of two vectors.
Definition: GeoTessUtils.h:134
static bool vectorTripleProduct(const double *const v0, const double *const v1, const double *const v2, double *const rslt)
Compute the normalized vector triple product (v0 x v1) x v2 and store result in rslt.
Definition: GeoTessUtils.h:822
static double getEarthRadius(const double *const v)
Retrieve the radius of the Earth in km at the position specified by an Earth-centered unit vector...
Definition: GeoTessUtils.h:553
static double * getVectorDegrees(const double &lat, const double &lon, double *v)
Convert geographic lat, lon into a geocentric unit vector.
Definition: GeoTessUtils.h:625
static bool parallel(const double *const u, const double *const v)
Returns true if unit vector u and v are parallel or very close to it.
Definition: GeoTessUtils.h:1066
static void transform(const double *x, double const *const *const t, double *const g)
Project vector x onto the plane of a great circle.
Definition: GeoTessUtils.h:456
GeoTessUtils()
Default constructor.
Definition: GeoTessUtils.h:100
static void cross(const double *const v1, const double *const v2, double *const rslt)
Cross product of two 3-component vectors.
Definition: GeoTessUtils.h:728
static void move(const double *const w, const double *const vtp, double a, double *const u)
Move unit vector w in direction of vtp by distance a and store result in u.
Definition: GeoTessUtils.h:1005
static double getLonDegrees(const double *const v)
Convert a 3-component unit vector to a longitude, in degrees.
Definition: GeoTessUtils.h:595
static double length(const double *const u)
Find the length of a 3-element vector.
Definition: GeoTessUtils.h:420
static double * getGreatCirclePoint(double const *const *const greatCircle, double distance)
A great circle is defined by two unit vectors that are 90 degrees apart.
Definition: GeoTessUtils.h:1087
static bool vectorTripleProductNorthPole(const double *const u, double *const w)
Compute the normalized vector triple product (u x northPole) x u and store result in w...
Definition: GeoTessUtils.h:856
static double getTriangleArea(const double *const v0, const double *const v1, const double *const v2)
Definition: GeoTessUtils.h:1129
static double * getVector(const double &lat, const double &lon)
Convert geographic lat, lon into a geocentric unit vector.
Definition: GeoTessUtils.h:641
virtual ~GeoTessUtils()
Destructor.
Definition: GeoTessUtils.h:105
static string class_name()
Returns the class name.
Definition: GeoTessUtils.h:111
static string getVersion()
The current GeoTess version.
Definition: GeoTessUtils.h:125
#define GEOTESS_EXP_IMP
Definition: CPPGlobals.h:71
static double angle(const double *const v0, const double *const v1)
Return the angular distance in radians between two unit vectors.
Definition: GeoTessUtils.h:497
static double * crossNormal(const double *const u, const double *const v)
Normalized cross product of two 3-component unit vectors.
Definition: GeoTessUtils.h:746
static double scalarTripleProduct(const double *const v0, const double *const v1, const double *const v2)
Calculate the scalar triple product of 3 3-component vectors: (v0 cross v1) dot v2.
Definition: GeoTessUtils.h:146
static void writeString(ofstream &ofs, const string &s)
Write the string s to the output file stream.
Definition: GeoTessUtils.h:484
static void readString(string &s, ifstream &ifs)
Read a string from the input file stream and set into s.
Definition: GeoTessUtils.h:469
static double getLatDegrees(const double *const v)
Convert a 3-component unit vector to geographic latitude, in degrees.
Definition: GeoTessUtils.h:582
static void center(vector< double * > v, double *x)
Return the normalized vector sum of the supplied unit vectors.
Definition: GeoTessUtils.h:1197
static void getGreatCirclePoint(double const *const *const greatCircle, double distance, double *const v)
A great circle is defined by two unit vectors that are 90 degrees apart.
Definition: GeoTessUtils.h:1112