コード例 #1
0
ファイル: BvhTetrahedronSystem.cpp プロジェクト: spinos/aphid
void BvhTetrahedronSystem::initOnDevice() 
{
    std::cout<<"\n tetrahedron system init on device";
	m_deviceTetrahedronVicinityInd->create(numTetrahedronVicinityInd() * 4);
	m_deviceTetrahedronVicinityStart->create((numTetrahedrons() + 1) * 4);
	m_deviceTetrahedronVicinityInd->hostToDevice(hostTetrahedronVicinityInd());
	m_deviceTetrahedronVicinityStart->hostToDevice(hostTetrahedronVicinityStart());
	m_vicinity->create(numTetrahedrons()*TETRAHEDRONSYSTEM_VICINITY_LENGTH*4);
	
	tetrasys::writeVicinity((int *)vicinity(), 
	         (int *)m_deviceTetrahedronVicinityInd->bufferOnDevice(), 
	         (int *)m_deviceTetrahedronVicinityStart->bufferOnDevice(), 
	         numTetrahedrons());
	
	CudaMassSystem::initOnDevice();
	
	setNumPrimitives(numTetrahedrons());
	CudaLinearBvh::initOnDevice();
}
コード例 #2
0
ファイル: searchmbh.cpp プロジェクト: mposypkin/LURIE
/*
 * Testing the perturbers
 */
int main(int argc, char** argv) {

    if (argc != 2)
        BNB_ERROR_REPORT("Usage: searchmbh.exe json_file\n");
    std::string jsons;
    FileUtils::getStringFromFile(argv[1], jsons);
    lur::ParseJson::parseModelData(jsons, mm);
    double ev;
    lur::ParseJson::parseLatticeData(jsons, mm, ev, x);

#if 0
    lur::PotentialCutter pc(6, 0.5, lur::ljpotent);
    lur::PairPotentialEnergy enrg(mm, pc);
#endif
#if 0    
    // Morse
    lur::PairPotentialEnergy enrg(mm, morsepotent);
#endif
#if 1
    // Tersoff
    lur::TersoffParams tparam;
    lur::fillCarbonParametersTersoffOriginal(tparam);
    lur::TersoffUtils tutils(tparam);
    lur::TersoffEnergy enrg(mm, tutils);
    //enrg.setFixedAtoms(true);
#endif    

    const int N = mm.mNumLayers * 3;
    lur::LurieObj obj(enrg, mm);
    NumGradObjective<double> nobj(obj);
    nobj.setH(1E-8);

    Box<double> box(N);
    lur::ParseJson::parseBoxData(jsons, box);
    NlpProblem<double> prob;
    prob.mBox = box;
    prob.mObj = &obj;

    BBStopper stp;
    BBBoxDescent<double> locs(box, &stp);
    locs.getOptions().mHInit = 4;
    locs.getOptions().mDec = 0.5;
    locs.getOptions().mHLB = 1e-6;
    locs.getOptions().mInc = 1.75;
    locs.setObjective(&nobj);
    RndFill<double> rfill(box);

    Box<double> vicinity(N);
    initVicinity(N, vicinity);
#if 0    
    StaticPerturber<double> perturber(prob, vicinity);
#else
    AdaptPerturber<double> perturber(prob, vicinity, AdaptPerturber<double>::Params({1, .01, 2, 0.1, 1.1}));
#endif    
#if 0
    MBHBoxCon<double> mbhbc(prob, perturber, H);
#else    
    MBHBoxCon<double> mbhbc(prob, perturber, H, &locs);
#endif

    signal(SIGINT, output);

    bv = mbhbc.search(x);

    std::cout << "Found v = " << bv << "\n";
    VecUtils::vecPrint(N, x);

    std::string json;
    json += "{\n";
    lur::GenJSON::genModel(mm, json);
    json += ", \n";
    lur::GenJSON::genBox(box, json);
    json += ", \n";
    lur::GenJSON::genLattice(mm, bv, x, json);
    json += "\n}\n";
    std::cout << json << "\n";
    return 0;
}
コード例 #3
0
ファイル: adaptaver.cpp プロジェクト: dive155/SmartImage
void AdaptAver::adaptMedian(int curx, int cury, int maxR)
{ //адаптивный фильтр для одного пикселя
    QColor pixel = QColor(0, 0, 0, 255);
    for (int i = 1; i <= maxR; i++)
    { //до тех пор пока окрестность не расширится до максимального размера
        QList<int> proxArrayR = vicinity(&image, i, curx, cury, 1); //берем окрестность по красному каналу
        int Zmin = listMin(proxArrayR); //минимальное значение в ней
        int Zmax = listMax(proxArrayR); //максимальное
        int Zmed = median(proxArrayR); //медианное
        int value = proxArrayR[proxArrayR.size()/2]; //значение самого текущего пикселя
        //QDebug () <<"red"<< Zmin << Zmax << Zmed << value;
        if ((Zmin < Zmed) && (Zmed < Zmax))
        { //проверяем первое условие
            if ((Zmin < value) && (value < Zmax))
            { //проверяем второе условие
                pixel.setRed(value); //если выполнено оставляем яркость без изменения
                //QDebug() << "1";
                break;
            }
            else
            {
                pixel.setRed(Zmed); //если нет то возвращаем медианное значение
                //QDebug() << "2";
                break;
            }
        }
        if (i == maxR) //если оба условия не выполнены и мы дошли до конца цикла
            pixel.setRed(value); //оставляем пиксель без изменений
    }
    //далее всё то же самое еще 2 раза для 2х каналов (зеленый и синий)
    for (int i = 1; i <= maxR; i++)
    {
        QList<int> proxArrayG = vicinity(&image, i, curx, cury, 2);
        int Zmin = listMin(proxArrayG);
        int Zmax = listMax(proxArrayG);
        int Zmed = median(proxArrayG);
        int value = proxArrayG[proxArrayG.size()/2];
        //QDebug () <<"green"<< Zmin << Zmax << Zmed << value;
        if ((Zmin < Zmed) && (Zmed < Zmax))
        {
            if ((Zmin < value) && (value < Zmax))
            {
                pixel.setGreen(value);
                //QDebug() << "3";
                break;
            }
            else
            {
                pixel.setGreen(Zmed);
                //QDebug() << "4";
                break;
            }
        }
        if (i == maxR)
            pixel.setGreen(value);
    }
    for (int i = 1; i <= maxR; i++)
    {
        QList<int> proxArrayB = vicinity(&image, i, curx, cury, 3);
        int Zmin = listMin(proxArrayB);
        int Zmax = listMax(proxArrayB);
        int Zmed = median(proxArrayB);
        int value = proxArrayB[proxArrayB.size()/2];
        //QDebug () <<"blue"<< Zmin << Zmax << Zmed << value;
        if ((Zmin < Zmed) && (Zmed < Zmax))
        {
            if ((Zmin < value) && (value < Zmax))
            {
                pixel.setBlue(value);
                //QDebug() << "5";
                break;
            }
            else
            {
                pixel.setBlue(Zmed);
                //QDebug() << "6";
                break;
            }
        }
        if (i == maxR)
            pixel.setBlue(value);
    }
    result.setPixel(curx, cury, pixel.rgb()); //записываем пиксель в результирующую картинку
}