isOnSegmentGC static method
Implementation
static bool isOnSegmentGC(num lat1, num lng1, num lat2, num lng2,
num lat3, num lng3, num havTolerance) {
num havDist13 = havDistance(lat1, lat3, lng1 - lng3);
if (havDist13 <= havTolerance) {
return true;
}
num havDist23 = havDistance(lat2, lat3, lng2 - lng3);
if (havDist23 <= havTolerance) {
return true;
}
double sinBearing = sinDeltaBearing(lat1, lng1, lat2, lng2, lat3, lng3);
num sinDist13 = MathUtil.sinFromHav(havDist13);
num havCrossTrack = MathUtil.havFromSin(sinDist13 * sinBearing);
if (havCrossTrack > havTolerance) {
return false;
}
num havDist12 = havDistance(lat1, lat2, lng1 - lng2);
num term = havDist12 + havCrossTrack * (1 - 2 * havDist12);
if (havDist13 > term || havDist23 > term) {
return false;
}
if (havDist12 < 0.74) {
return true;
}
num cosCrossTrack = 1 - 2 * havCrossTrack;
double havAlongTrack13 = (havDist13 - havCrossTrack) / cosCrossTrack;
double havAlongTrack23 = (havDist23 - havCrossTrack) / cosCrossTrack;
num sinSumAlongTrack = MathUtil.sinSumFromHav(havAlongTrack13, havAlongTrack23);
return sinSumAlongTrack > 0; // Compare with half-circle == PI using sign of sin().
}