gpt4 book ai didi

c++ - 如何逆时针排序具有n个元素的一个 vector 的所有点

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:49 25 4
gpt4 key购买 nike

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

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

我写在this post about之前,如何使用 (x, y, z) 对点 vector 进行排序。

我会在这里解释问题是什么。

我有这个 vector :

 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]

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

有人愿意帮助我吗?

最佳答案

我没有写出完整的解决方案,但您可以将比较器传递给 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.
}
});

关于c++ - 如何逆时针排序具有n个元素的一个 vector 的所有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com