コード例 #1
0
ファイル: NQueen.cpp プロジェクト: Nowar/OnlineJudge
void NQueen::dump() {
  assert (AnswerSet.size() == MaxDim);
  for (auto Answer : AnswerSet) {
    std::cerr << "(" << Answer.first << ", " << Answer.second << ") ";
  }
  std::cerr << " Surface: " << calculateSurface() << std::endl;
}
コード例 #2
0
ファイル: NQueen.cpp プロジェクト: Nowar/OnlineJudge
bool NQueen::solveEach(unsigned MinR, unsigned MinH, unsigned MaxSum, unsigned Iteration) {
  if (Iteration == MaxDim) {
    if (MaxSum == 0) {
#ifndef ONLINE_JUDGE
      dump();
#endif
      unsigned TotalSurface = calculateSurface();
      if (TotalSurface < MinSurface)
        MinSurface = TotalSurface;
      SolutionNumber += 1;
      return true;
    } else {
      return false;
    }
  }

  for (unsigned i = MinR + 1; i < MaxSum; ++i) {
    for (unsigned j = MinH + 1; j < MaxSum; ++j) {
      unsigned result = i * i * j;
      if (result <= MaxSum) {
        AnswerSet.push_back(std::make_pair(i, j));
        solveEach(i, j, MaxSum - result, Iteration + 1);
        AnswerSet.resize(AnswerSet.size() - 1);
      } else {
        break;  // Over
      }
    }
  }
  return false;
}
コード例 #3
0
void CubeData::on_calculateButton_clicked(bool)
{ 
   accept();
   double isoValue(m_cubeDataConfigurator.isovalue->value());
   QColor positive(Preferences::PositiveSurfaceColor());
   QColor negative(Preferences::NegativeSurfaceColor());
   Grid::DataType data(Grid::DataType::CubeData);
   calculateSurface(new Layer::Surface(data, -1, isoValue, positive, negative)); 
}
コード例 #4
0
void CubeData::on_calculateButton_clicked(bool)
{ 
   accept();

   QColor positive(Preferences::PositiveSurfaceColor());
   QColor negative(Preferences::NegativeSurfaceColor());
   double isovalue(m_cubeDataConfigurator.isovalue->value());
   unsigned quality(0);
   bool isSigned(m_cubeDataConfigurator.signedButton->checkState() == Qt::Checked);
   bool simplifyMesh(m_cubeDataConfigurator.simplifyMeshCheckBox->isChecked());

   Data::SurfaceType surfaceType(Data::SurfaceType::CubeData);
   Data::SurfaceInfo surfaceInfo(surfaceType, quality, isovalue, positive, negative, 
      isSigned, simplifyMesh);

   calculateSurface(surfaceInfo);
}
コード例 #5
0
void SurfaceAnimatorDialog::computeMultiGridAnimation()
{
    QListWidget* fileList(m_dialog.fileList);
    m_referenceFrames = fileList->count();
    if (m_referenceFrames < 2) return;

    int interpolationFrames(m_dialog.interpolationFrames->value());
    double isovalue(m_dialog.isovalue->value());
    double delta = 1.0/interpolationFrames;

    QListWidgetItem* item(fileList->item(0));
    Layer::CubeData* cube(QVariantPointer<Layer::CubeData>::toPointer(item->data(Qt::UserRole)));

    Grid* A(cube->grid());
    Grid* B(0);

    Grid::Size size(A->size());
    Grid::DataType dataType(Grid::DataType::CubeData);
    Grid  dAB(dataType, size);
    Grid  t(dataType, size);

    Animator::Combo::DataList frames;
    Layer::Surface* surface;

    QString label;

    int totalSurfaces((m_referenceFrames-1)*interpolationFrames);
    QProgressDialog progressDialog("Calculating surfaces", "Cancel", 0,
                                   totalSurfaces, this);
    progressDialog.setWindowModality(Qt::WindowModal);

    int totalProgress(0);
    progressDialog.setValue(totalProgress);

    // loop over grids
    for (int i = 1; i < m_referenceFrames; ++i) {
        if (progressDialog.wasCanceled()) return;

        Data::Geometry const& geomA(cube->geometry());
        item = fileList->item(i);
        cube = QVariantPointer<Layer::CubeData>::toPointer(item->data(Qt::UserRole));
        Data::Geometry const& geomB(cube->geometry());

//qDebug() << "first geom";
//geomA.dump();
//qDebug() << "second geom";
//geomB.dump();

        // Geometry displacements
        QList<Vec> displacements;
        for (int a = 0; a < geomA.nAtoms(); ++a) {
            Vec d(geomB.position(a)-geomA.position(a));
            displacements.append(d);
        }

        // Grid displacements
        B    = cube->grid();
        t    = (*A);
        dAB  = (*B);
        dAB -= t;

        surface = calculateSurface(&dAB, isovalue);
        surface->setText("Difference Surface");
        cube->appendLayer(surface);

        dAB *= delta;

        // loop over interpolation Frames
        for (int j = 0; j < interpolationFrames; ++j) {
            Data::Geometry geomT;
            for (int a = 0; a < geomA.nAtoms(); ++a) {
                double step = (double)j/(double)interpolationFrames;
                Vec d(geomA.position(a) + step*displacements[a]);
                geomT.append(geomA.atomicNumber(a), d);
            }

            surface = calculateSurface(&t, isovalue);
            frames.append(new Animator::Combo::Data(geomT, surface));
            label = (j == 0) ? "Cube Data " + QString::number(i)
                    : "Interpolation Frame " + QString::number(j);
            surface->setText(label);
            cube->appendLayer(surface);

            ++totalProgress;
            progressDialog.setValue(totalProgress);
            if (progressDialog.wasCanceled()) return;

            t += dAB;  // increment the interpolation grid
        }
        A = B;
    }

    // Take care of the final reference frame
    surface = calculateSurface(B, isovalue);
    surface->setText("Cube Data " + QString::number(m_referenceFrames));
    cube->appendLayer(surface);

    frames.append(new Animator::Combo::Data(cube->geometry(), surface));
    m_animator = new Animator::Combo(m_molecule, frames, interpolationFrames, m_speed);
    connect(m_animator, SIGNAL(finished()), this, SLOT(animationStopped()));
    m_dialog.playbackBox->setEnabled(true);
}