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