/**
   * Maps one Coordinate to another.
   *
   * @param c a Coordinate which must be inside one of the triangle keys passed into the constructor
   * @return the transformed Coordinate
   */
  public Coordinate transform(Coordinate c) {
    monitor.report(++coordinatesTransformed, -1, "coordinates");

    Triangle sourceTriangle = sourceTriangle(c);
    Assert.isTrue(sourceTriangle != null, "Unable to determine source triangle for " + c);

    Triangle destTriangle = destTriangle(sourceTriangle);

    return destTriangle.toEuclideanCoordinate(sourceTriangle.toSimplicialCoordinate(c));
  }