SHARE
TWEET

Untitled

a guest Mar 26th, 2020 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void drawContourMarchingBetter(UI& ui, Blob& blob, float threshold = 0.015)
  2. {
  3.     bool bool_array[4];
  4.     Point temppoint;
  5.     Point temppoint2;
  6.     Point point;
  7.     std::queue<Point> worklist;
  8.     std::set<Point> visited;
  9.     const int sizeX = ui.sizeX;
  10.     const int sizeY = ui.sizeY;
  11.     float current_value = 0;
  12.     bool previous_value = false;
  13.     int k = 0;
  14.     int l = 0;
  15.     int i = 0;
  16.     int j = 0;
  17.     int new_size_x = 0;
  18.     int new_size_y = 0;
  19.     ui.drawPixel(0, 0);
  20.     for (j = -sizeX; j < sizeX; j++) {
  21.         for (i = -sizeY; i < sizeY; i++) {
  22.             current_value = blob.potential(i, j);
  23.             if (i == -sizeY) {
  24.                 if (current_value >= threshold) {
  25.                     previous_value = true;
  26.                 }
  27.                 else {
  28.                     previous_value = false;
  29.                 }
  30.             }
  31.  
  32.             if ((current_value >= threshold) && (previous_value == false) || (current_value <= threshold) && (previous_value == true)) {
  33.                 ui.drawPixel(i, j);
  34.                 std::cout << "Value of i: " << i << "and value of j: " << j << std::endl;
  35.  
  36.                 temppoint.x = i;
  37.                 temppoint.y = j;
  38.                 worklist.push(temppoint);
  39.                 if ((j <= 0) && (i <= 0)) {
  40.                     k = 0;
  41.                     l = 0;
  42.                     new_size_x = sizeY;
  43.                     new_size_y = sizeX;
  44.                 }
  45.                 else if ((j > 0) && (i > 0)) {
  46.                     l = -sizeX;
  47.                     k = -sizeY;
  48.                     new_size_x = 0;
  49.                     new_size_y = 0;
  50.                 }
  51.                 else if ((j < 0) && (i > 0)) {
  52.                     l = 0;
  53.                     k = -sizeY;
  54.                     new_size_x = 0;
  55.                     new_size_y = sizeX;
  56.                 }
  57.                 else if ((j > 0) && (i < 0)) {
  58.                     l = -sizeY;
  59.                     k = 0;
  60.                     new_size_x = sizeY;
  61.                     new_size_y = 0;
  62.  
  63.                 }
  64.                 j = sizeX;
  65.                 i = sizeY;
  66.             }
  67.         }
  68.     }
  69.     float current_value2 = 0;
  70.     bool previous_value2 = false;
  71.     int original_k = k;
  72.     for (l; l < new_size_y; l++) {
  73.         for (k; k < new_size_x; k++) {
  74.             current_value2 = blob.potential(k, l);
  75.             if (k == original_k) {
  76.                 if (current_value2 >= threshold) {
  77.                     previous_value2 = true;
  78.                 }
  79.                 else {
  80.                     previous_value2 = false;
  81.                 }
  82.             }
  83.  
  84.             else {
  85.                 if ((current_value2 >= threshold) && (previous_value2 == false) || (current_value2 < threshold) && (previous_value2 == true)) {
  86.                     std::cout << "Value of k: " << k << "and value of l: " << l;
  87.                     temppoint2.x = k;
  88.                     temppoint2.y = l;
  89.                     if ((k == i) && (l == j)){
  90.                         std::cout << "I'm going to continue!";
  91.                         continue;
  92.                     }
  93.                     else {
  94.                         ui.drawPixel(k, l);
  95.                         worklist.push({ temppoint2.x,temppoint2.y });
  96.                         k = new_size_x;
  97.                         l = new_size_y;
  98.                     }
  99.  
  100.                     if (current_value2 >= threshold) {
  101.                         previous_value2 = true;
  102.                     }
  103.                     else if (current_value2 < threshold) {
  104.                         previous_value2 = false;
  105.                     }
  106.                    
  107.                     }          
  108.                      
  109.                   }
  110.              
  111.         }
  112.  
  113.     }
  114.     while (!worklist.empty()) {
  115.         temppoint = worklist.front();
  116.         worklist.pop();
  117.         if (visited.find(temppoint) != visited.end()) {
  118.  
  119.             //drawContourMarching(ui, blob, threshold = 0.015);
  120.         }
  121.         else {
  122.             float p1, p2, p3, p4;
  123.             int position_y = temppoint.y;
  124.             int position_x = temppoint.x;
  125.  
  126.             visited.insert(temppoint);
  127.             p1 = blob.potential(position_x + 0.5, position_y + 0.5);
  128.             p2 = blob.potential(position_x + 0.5, position_y - 0.5);
  129.             p3 = blob.potential(position_x - 0.5, position_y + 0.5);
  130.             p4 = blob.potential(position_x - 0.5, position_y - 0.5);
  131.  
  132.             bool_array[0] = p1 < threshold;
  133.             bool_array[1] = p2 < threshold;
  134.             bool_array[2] = p3 < threshold;
  135.             bool_array[3] = p4 < threshold;
  136.  
  137.             if (bool_array[0] != bool_array[1] || bool_array[1] != bool_array[2] || bool_array[2] != bool_array[3]) {
  138.  
  139.                 ui.drawPixel(position_x, position_y);
  140.                 worklist.push({ temppoint.x - 1, temppoint.y - 1 });
  141.                 worklist.push({ temppoint.x, temppoint.y - 1 });
  142.                 worklist.push({ temppoint.x + 1, temppoint.y - 1 });
  143.                 worklist.push({ temppoint.x - 1, temppoint.y });
  144.  
  145.                 worklist.push({ temppoint.x + 1, temppoint.y });
  146.                 worklist.push({ temppoint.x - 1, temppoint.y + 1 });
  147.                 worklist.push({ temppoint.x, temppoint.y + 1 });
  148.                 worklist.push({ temppoint.x + 1, temppoint.y + 1 });
  149.                 //drawContourMarching(ui, blob, threshold = 0.015);
  150.             }
  151.         }
  152.     }
  153. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top