Ejemplo n.º 1
0
void BSInterpolation::InitializeSpline(QMatrix4x4 matrix)
{
    if (markers.length() == 1)
        return;
    if (markers.length() >= 4)
        degree = 3;
    if (markers.length() == 3)
        degree = 2;
    if (markers.length() == 2)
        degree = 1;


    //remove double
    int count = 0;
    for (int i = 0; i<markers.length()-1; i++) {
        if (markers[i]->point.x() == markers[i+1]->point.x() &&
                markers[i]->point.y() == markers[i+1]->point.y() &&
                markers[i]->point.z() == markers[i+1]->point.z()) {
            count++;
        }
    }
    if (count > 0)
        return;

    Clear();
    CalculateParameters();
    CalculateControlPoints();
    InitializeBSpline(matrix);
}
Ejemplo n.º 2
0
void CalculateParameters(const string& folder)
{
    clock_t start, end;
    for(size_t i = 1; i <= 26; ++i)
    {
        start = clock();
        string file = folder + std::to_string(i) + ".txt";
        DayData data = ReadDay(file);
        end = clock();
        std::cout << i << " reading: " << double(end - start) /  CLOCKS_PER_SEC << std::endl;
        start = clock();
        CalculateParameters(data);
        end = clock();
        std::cout << i << " calculations: " << double(end - start) /  CLOCKS_PER_SEC << std::endl;
    }
    Save("/tmp/query_url_parameters.txt", queryUrlParameters);
    Save("/tmp/user_url_parameters.txt", userUrlParameters);
}
Ejemplo n.º 3
0
//------------------------------------------------------------------------------
Solver::SolverState Solver::AdvanceState()
{
   switch (currentState) {
      case INITIALIZING:
         CompleteInitialization();
         break;
        
      case NOMINAL:
         RunNominal();
         break;
        
      case PERTURBING:
         RunPerturbation();
         break;
        
      case ITERATING:
         RunIteration();
         break;
        
      case CALCULATING:
         CalculateParameters();
         break;
        
      case CHECKINGRUN:
         CheckCompletion();
         break;
        
      case RUNEXTERNAL:
         RunExternal();
         break;
        
      case FINISHED:
         RunComplete();
         break;
        
      default:
         throw SolverException(wxT("Undefined Solver state"));
    };
    
    ReportProgress();
    return currentState; 
}
Ejemplo n.º 4
0
//------------------------------------------------------------------------------
Solver::SolverState  SteepestDescent::AdvanceState()
{
   switch (currentState)
   {
      case INITIALIZING:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("INITIALIZING\n"));
         #endif
         iterationsTaken = 0;
         WriteToTextFile();
//         ReportProgress();
         CompleteInitialization();
      
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), 
               INITIALIZING, currentState);
         #endif
         break;
      
      case NOMINAL:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("NOMINAL\n"));
         #endif
//         ReportProgress();
         RunNominal();
//         ReportProgress();
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), NOMINAL,
               currentState);
         #endif
         // ReportProgress();
         break;
   
      case PERTURBING:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("PERTURBING\n"));
         #endif
         RunPerturbation();
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), PERTURBING,
               currentState);
         #endif
         // ReportProgress();
         break;
   
      case Solver::CALCULATING:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("CALCULATING\n"));
         #endif
//         ReportProgress();
         CalculateParameters();
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), CALCULATING,
               currentState);
         #endif
         break;
            
      case CHECKINGRUN:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("CHECKINGRUN\n"));
         #endif
         CheckCompletion();
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), CHECKINGRUN,
               currentState);
         #endif
         // ReportProgress();
         break;
   
      case FINISHED:
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(wxT("Entered state machine; ")
                  wxT("FINISHED\n"));
         #endif
         RunComplete();
         #ifdef SD_DEBUG_STATE_MACHINE
            MessageInterface::ShowMessage(
               wxT("SteepestDescent State Transitions from %d to %d\n"), FINISHED,
               currentState);
         #endif
         // ReportProgress();
         break;
         
      default:
         throw SolverException(
                  wxT("Steepest Descent Solver \"") + instanceName + 
                  wxT("\" encountered an unexpected state."));
   }
      
   return currentState;
}
Ejemplo n.º 5
0
int CalculateData(exp_data &src_data, exp_data &dst_data, double &a1, double &b1, double &b2, signed char n0, vector<double> &mbx, unsigned char f)
{
	vector<point> linear_data;
	vector<point_2> linear_data_2;
    signed char sign = n0 >= 0 ? 1 : -1;
    linear_data.clear();
    dst_data.clear();
    linear_data_2.clear();
	int res = 0;
    if (f <= 19) res = LinearData(src_data, linear_data, n0, f);
    if (f == 20) res = LinearData(src_data, linear_data_2, n0, f);
	if (res != 0) return res;
    double a = 0;
	double b = 0;
    if (f == 19)
    {
        if (!Approximator::GetPolynom(linear_data, mbx, n0 + sign))
        {
            f = 1;
			return -1;
        }
    }
    if (f <= 18)
    {
        a = Approximator::GetA(linear_data);
        b = Approximator::GetB(linear_data);
    }
    if (f == 20)
    {
        a = Approximator_2::GetA(linear_data_2);
        b = Approximator_2::GetB(linear_data_2);
        b2 = Approximator_2::GetB2(linear_data_2);
    }
    CalculateParameters(a, b, a1, b1, f);
    function deps[17] = {Func1,Func2,Func3,Func4,Func5,Func6,Func7,Func8,
        Func9,Func10,Func11,Func12,Func13,Func14,Func15,Func16,Func17};
    for (iter index = src_data.begin();index != src_data.end();index++)
    {
        double x1 = 0;
		double y1 = 0;
        x1 = (*index).first;
        if (f <= 1)
        {
            y1 = deps[0](a1, b1, x1);
        }
        else
        {
            if (f < 18)
            {
                y1 = deps[f - 1](a1, b1, x1);
            }
            else
            {
                if (f == 18)
                {
                    y1 = Func18(a1, b1, x1, n0);
                }
                if (f == 19)
                {
                    y1 = Func19(mbx, x1, n0);
                }
                if (f == 20)
                {
                    y1 = Func20(a1, b1, b2, x1);
                }
            }
        }
        dst_data.push_back(point(x1,y1));
    }
	return 0;
}