/**
   * set coords to origin O and vector (I-O). If I (or O) is infinite, I is used as direction
   * vector.
   *
   * @param O origin point
   * @param I unit point
   */
  public void setCoord(GeoPointND O, GeoPointND I) {

    startPoint = O;
    endPoint = I;

    if (I.isInfinite())
      if (O.isInfinite()) setUndefined(); // TODO infinite line
      else setCoord(O.getCoordsInD(3), I.getCoordsInD(3));
    else if (O.isInfinite()) setCoord(I.getCoordsInD(3), O.getCoordsInD(3));
    else setCoord(O.getCoordsInD(3), I.getCoordsInD(3).sub(O.getCoordsInD(3)));
  }