public void initLineMin(
      Matrix4f kToOrigin,
      Matrix4f kFromOrigin,
      float rigid,
      float dim,
      double[] startPoint,
      double[] pt,
      int ptLength,
      double[] unitDirections,
      double unit_tolerance,
      double fMinDist,
      double bracketA,
      double functionA,
      double bracketB,
      double functionB,
      double bracketC,
      double functionC) {
    m_fUnitTolerance = (float) unit_tolerance;
    m_kToOrigin = convertTo4D(kToOrigin);
    m_kFromOrigin = convertTo4D(kFromOrigin);
    m_fRigid = rigid;
    m_fDim = dim;

    for (int i = 0; i < startPoint.length; i++) {
      m_afStartPoint[i] = (float) startPoint[i];
    }
    for (int i = 0; i < unitDirections.length; i++) {
      m_afUnitDirections[i] = (float) unitDirections[i];
    }
    for (int i = 0; i < pt.length; i++) {
      m_afPt[i] = (float) pt[i];
    }
    m_fPtLength = ptLength;
    m_fMinDist = (float) fMinDist;

    if (m_kImageLineMinDual != null) {
      m_kImageLineMinDual.updateParameters(
          m_kToOrigin,
          m_kFromOrigin,
          m_fRigid,
          m_fDim,
          m_afStartPoint,
          m_afPt,
          m_fPtLength,
          m_afUnitDirections,
          m_fUnitTolerance,
          m_fMinDist);
    }
    if (m_kCalcTransform != null) {
      m_kCalcTransform.updateParameters(
          m_kToOrigin,
          m_kFromOrigin,
          m_fRigid,
          m_fDim,
          m_afStartPoint,
          m_afPt,
          m_fPtLength,
          m_afUnitDirections,
          m_fUnitTolerance,
          m_fMinDist);
    }
    if (m_kImageLineMinPass2a != null) {
      m_kImageLineMinPass2a.setMinDist(m_fMinDist);
    }

    int index = 0;
    m_afBracket[index++] = (float) bracketA;
    m_afBracket[index++] = (float) functionA;
    m_afBracket[index++] = -1f;
    m_afBracket[index++] = 0f;

    m_afBracket[index++] = (float) bracketB;
    m_afBracket[index++] = (float) functionB;
    m_afBracket[index++] = 0f;
    m_afBracket[index++] = 0f;

    m_afBracket[index++] = (float) bracketC;
    m_afBracket[index++] = (float) functionC;
    m_afBracket[index++] = 0f;
    m_afBracket[index++] = 0f;

    if (m_kBracketOut != null) {
      if (m_kBracketOut.GetTarget(0) != null) {
        if (m_kBracketOut.GetTarget(0).GetImage() != null) {
          m_kBracketOut.GetTarget(0).GetImage().SetData(m_afBracket, 1, 3);
          m_kBracketOut.GetTarget(0).Reload(true);
        }
      }
    }
  }