1

我正在寻找以下问题的解决方案:

我计划用某种向量来解决这个问题,但这并不是我所有情况的解决方案。

我在这篇文章之前写过,如何用 (x, y, z) 对点向量进行排序。

我将在这里解释问题所在。

我有这个向量

 Point [0] = [X: 3.00;Y: 0.00;Z: 0.00] 
 Point [1] = [X: 3.00;Y: 0.00;Z: 3.00] 
 Point [2] = [X: 3.00;Y: 5.00;Z: 0.00] 
 Point [3] = [X: 3.00;Y: 5.00;Z: 3.00] 
 Point [4] = [X: 0.00;Y: 5.00;Z: 0.00] 
 Point [5] = [X: 0.00;Y: 5.00;Z: 3.00] 
 Point [6] = [X: 0.00;Y: 0.00;Z: 0.00] 
 Point [7] = [X: 0.00;Y: 0.00;Z: 3.00]

第一步按 z 排序:然后

std::sort(std::begin(vector_points), std::end(vector_points),
[](auto const& a, auto const& b) {return (a.z < b.z); });

 Point [0] = [X: 3.00;Y: 0.00;Z: 0.00] 
 Point [1] = [X: 3.00;Y: 5.00;Z: 0.00] 
 Point [2] = [X: 0.00;Y: 5.00;Z: 0.00] 
 Point [3] = [X: 0.00;Y: 0.00;Z: 0.00] 
 Point [4] = [X: 3.00;Y: 0.00;Z: 3.00] 
 Point [5] = [X: 3.00;Y: 5.00;Z: 3.00] 
 Point [6] = [X: 0.00;Y: 5.00;Z: 3.00] 
 Point [7] = [X: 0.00;Y: 0.00;Z: 3.00]

第二步按 y 排序:然后

 auto yComp = [](const auto& p1, const auto& p2){return p1.y < p2.y;};

 std::sort(vector_points.begin(), vector_points.begin() + 4, yComp);

 std::sort(vector_points.begin() + 4, vector_points.begin() + 8, yComp);

 Point [0] = [X: 3.00;Y: 0.00;Z: 0.00] 
 Point [1] = [X: 0.00;Y: 0.00;Z: 0.00] 
 Point [2] = [X: 3.00;Y: 5.00;Z: 0.00] 
 Point [3] = [X: 0.00;Y: 5.00;Z: 0.00] 
 Point [4] = [X: 3.00;Y: 0.00;Z: 3.00] 
 Point [5] = [X: 0.00;Y: 0.00;Z: 3.00] 
 Point [6] = [X: 3.00;Y: 5.00;Z: 3.00] 
 Point [7] = [X: 0.00;Y: 5.00;Z: 3.00] 

第三步按 x 排序:然后

std::sort(vector_points.begin(), vector_points.begin() + 2, xComp);

std::sort(vector_points.begin() + 2, vector_points.begin() + 4, xComp);

std::sort(vector_points.begin() + 4, vector_points.begin() + 6, xComp);

std::sort(vector_points.begin() + 6, vector_points.begin() + 8, xComp);

 Point [0] = [X: 0.00;Y: 0.00;Z: 0.00] 
 Point [1] = [X: 3.00;Y: 0.00;Z: 0.00] 
 Point [2] = [X: 0.00;Y: 5.00;Z: 0.00] 
 Point [3] = [X: 3.00;Y: 5.00;Z: 0.00] 
 Point [4] = [X: 0.00;Y: 0.00;Z: 3.00] 
 Point [5] = [X: 3.00;Y: 0.00;Z: 3.00] 
 Point [6] = [X: 0.00;Y: 5.00;Z: 3.00] 
 Point [7] = [X: 3.00;Y: 5.00;Z: 3.00] 

我想要一个前半部分点按逆时针方向排序的向量。

有人会帮助我吗?

4

1 回答 1

0

我没有写出完整的解决方案,但您可以将比较器传递给 std::sort:

std::sort(std::begin(vector_points), std::end(vector_points), [](const auto& a, const auto& b)
{
   if (a.z < 0)
   {
      //compare x and y points and return true/false depending.
   }
   else
   {
      //compare x and y points and return false/true depending.
   }
});
于 2017-03-20T16:36:27.867 回答