Ejemplo n.º 1
0
gcc_pure
static FlatGeoPoint
NearestPoint(const FlatGeoPoint &p1, const FlatGeoPoint &p2,
              const FlatGeoPoint &p3)
{
  const FlatGeoPoint p12 = p2-p1;
  const fixed rsq(p12.DotProduct(p12));
  if (!positive(rsq)) {
    return p1;
  }
  const FlatGeoPoint p13 = p3-p1;
  const fixed numerator(p13.DotProduct(p12));
  
  if (!positive(numerator)) {
    return p1;
  } else if (numerator>= rsq) {
    return p2;
  } else {
    fixed t = numerator/rsq;
    return p1+(p2-p1)*t;
  }
}
Ejemplo n.º 2
0
gcc_pure
static FlatGeoPoint
NearestPoint(const FlatGeoPoint &p1, const FlatGeoPoint &p2,
              const FlatGeoPoint &p3)
{
  const FlatGeoPoint p12 = p2-p1;
  const double rsq(p12.DotProduct(p12));
  if (rsq <= 0)
    return p1;

  const FlatGeoPoint p13 = p3-p1;
  const double numerator(p13.DotProduct(p12));
  
  if (numerator <= 0) {
    return p1;
  } else if (numerator>= rsq) {
    return p2;
  } else {
    double t = numerator/rsq;
    return p1+(p2-p1)*t;
  }
}
Ejemplo n.º 3
0
unsigned
FlatGeoPoint::DistanceSquared(const FlatGeoPoint &sp) const
{
  const FlatGeoPoint delta = *this - sp;
  return delta.DotProduct(delta);
}