void NQueen::dump() { assert (AnswerSet.size() == MaxDim); for (auto Answer : AnswerSet) { std::cerr << "(" << Answer.first << ", " << Answer.second << ") "; } std::cerr << " Surface: " << calculateSurface() << std::endl; }
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; }
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)); }
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); }
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); }