差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
cgfs:shaded_triangles [2025/11/19 15:14] – using std::swap; freemikancgfs:shaded_triangles [2025/12/12 15:57] (現在) – Replace overused back_inserters freemikan
行 33: 行 33:
     }     }
  
-    auto a = (d1 - d0) / (i1 - i0); +    float a = (d1 - d0) / (i1 - i0); 
-    auto d = d0;+    float d = d0;
  
     for (int i = i0; i <= i1; ++i) {     for (int i = i0; i <= i1; ++i) {
-        *out++ = d;+        *out = d
 +        ++out;
         d += a;         d += a;
     }     }
行 77: 行 78:
     }     }
  
-    auto yi0 = static_cast<int>(std::floor(P0.y)); +    int yi0 = static_cast<int>(std::floor(P0.y)); 
-    auto yi1 = static_cast<int>(std::floor(P1.y)); +    int yi1 = static_cast<int>(std::floor(P1.y)); 
-    auto yi2 = static_cast<int>(std::floor(P2.y));+    int yi2 = static_cast<int>(std::floor(P2.y));
  
-    auto x01 = std::vector<float>(yi1 - yi0 + 1); +    std::vector<float> x01(yi1 - yi0 + 1); 
-    auto h01 = std::vector<float>(yi1 - yi0 + 1);+    std::vector<float> h01(yi1 - yi0 + 1);
     Interpolate(yi0, P0.x, yi1, P1.x, x01.begin());     Interpolate(yi0, P0.x, yi1, P1.x, x01.begin());
     Interpolate(yi0, P0.h, yi1, P1.h, h01.begin());     Interpolate(yi0, P0.h, yi1, P1.h, h01.begin());
  
-    auto x12 = std::vector<float>(yi2 - yi1 + 1); +    std::vector<float> x12(yi2 - yi1 + 1); 
-    auto h12 = std::vector<float>(yi2 - yi1 + 1);+    std::vector<float> h12(yi2 - yi1 + 1);
     Interpolate(yi1, P1.x, yi2, P2.x, x12.begin());     Interpolate(yi1, P1.x, yi2, P2.x, x12.begin());
     Interpolate(yi1, P1.h, yi2, P2.h, h12.begin());     Interpolate(yi1, P1.h, yi2, P2.h, h12.begin());
  
-    auto x02 = std::vector<float>(yi2 - yi0 + 1); +    std::vector<float> x02(yi2 - yi0 + 1); 
-    auto h02 = std::vector<float>(yi2 - yi0 + 1);+    std::vector<float> h02(yi2 - yi0 + 1);
     Interpolate(yi0, P0.x, yi2, P2.x, x02.begin());     Interpolate(yi0, P0.x, yi2, P2.x, x02.begin());
     Interpolate(yi0, P0.h, yi2, P2.h, h02.begin());     Interpolate(yi0, P0.h, yi2, P2.h, h02.begin());
  
 + // remove an overlapping point at x01.back and x12.front
     x01.pop_back();     x01.pop_back();
     assert(x01.size() + x12.size() == x02.size());     assert(x01.size() + x12.size() == x02.size());
  
 + // remove an overlapping point at h01.back and h12.front
     h01.pop_back();     h01.pop_back();
     assert(h01.size() + h12.size() == h02.size());     assert(h01.size() + h12.size() == h02.size());
  
-    auto x012 = std::vector<float>(x01.size() + x12.size() + 1); +    std::vector<float> x012(x01.size() + x12.size()); 
-    auto corner_x012 = std::copy(x01.begin(), x01.end(), x012.begin()); +    std::merge(x01.begin(), x01.end(), x12.begin()x12.end(), x012.begin());
-    std::copy(x12.begin(), x12.end(), corner_x012);+
  
-    auto h012 = std::vector<float>(h01.size() + h12.size() + 1); +    std::vector<float> h012(h01.size() + h12.size()); 
-    auto corner_h012 = std::copy(h01.begin(), h01.end(), h012.begin()); +    std::merge(h01.begin(), h01.end(), h12.begin(), h12.end(), h012.begin()); 
-    std::copy(h12.begin(), h12.end(), corner_h012);+ 
 +    assert(x012.size() == x02.size()); 
 +    assert(h012.size() == h02.size()); 
 +    assert(x012.size() == h012.size());
  
     auto m = x012.size() / 2;     auto m = x012.size() / 2;
行 121: 行 126:
     }     }
  
-    auto h_segment = std::vector<float>();+    std::vector<float> h_segment;
  
     for (int y = yi0; y <= yi2; ++y) {     for (int y = yi0; y <= yi2; ++y) {
-        auto x_l = static_cast<int>(std::floor(x_left[y - yi0])); +        int x_l = static_cast<int>(std::floor(x_left[y - yi0])); 
-        auto x_r = static_cast<int>(std::floor(x_right[y - yi0]));+        int x_r = static_cast<int>(std::floor(x_right[y - yi0]));
  
         h_segment.clear();         h_segment.clear();
文書の先頭へ