void CalculateCarpenterSampleCorrection::calculate_ms_correction(
    const double angle_deg, const double radius, const double coeff1,
    const double coeff2, const double coeff3, const Points &wavelength,
    HistogramY &y_val) {

  const size_t NUM_Y = y_val.size();
  bool is_histogram = false;
  if (wavelength.size() == NUM_Y + 1)
    is_histogram = true;
  else if (wavelength.size() == NUM_Y)
    is_histogram = false;
  else
    throw std::runtime_error("Data is neither historgram or density");

  // initialize Z array for this angle
  vector<double> Z = createZ(angle_deg);

  const double Q2 = coeff1 * coeff2;
  const double sigsct = coeff2 * coeff3;

  for (size_t j = 0; j < NUM_Y; j++) {
    double wl_val = wavelength[j];
    if (is_histogram) // average with next value
      wl_val = .5 * (wl_val + wavelength[j + 1]);

    y_val[j] = calculate_ms_factor(radius, Q2, sigsct, Z, wl_val);
  }
}
Пример #2
0
Shape::Shape()
{
    transformIndex = 0;
    mainBlock = sf::Vector2i(5,1);
    
    int randomBelowSeven = rand() % 7;
    
    switch (randomBelowSeven)
    {
        case 0:
            createI();
            break;
        case 1:
            createJ();
            break;
        case 2:
            createS();
            break;
        case 3:
            createO();
            break;
        case 4:
            createZ();
            break;
        case 5:
            createL();
            break;
        case 6:
            createT();
            break;
    }
    
    applyTransform(transformIndex);
}
 // --------------------------------------------
 void RotateHelper::createRotation ( )
 {
     switch (rotation.order)
     {
     case MEulerRotation::kXYZ: 
         createZ(0); createY(1); createX(2); 
         break;
     case MEulerRotation::kXZY: 
         createY(0); createZ(1); createX(2); 
         break;
     case MEulerRotation::kYXZ: 
         createZ(0); createX(1); createY(2); 
         break;
     case MEulerRotation::kYZX: 
         createX(0); createZ(1); createY(2); 
         break;
     case MEulerRotation::kZXY: 
         createY(0); createX(1); createZ(2); 
         break;
     case MEulerRotation::kZYX: 
         createX(0); createY(1); createZ(2); 
         break;
     default: 
         // Export XYZ euler rotation in Z Y X order in the file.
         // The rotation order is set to XYZ, Collada reads the parameter from behind.
         createZ(0); createY(1); createX(2); 
         break;
     }
 }