首页 > 解决方案 > 使用自定义对象对向量进行排序

问题描述

我正在尝试让光线投射适用于 2d 游戏并达到我的相交正确存储在向量中的地步,但我无法弄清楚如何正确排序向量,就像你画一条水平线一样从玩家到屏幕左侧,然后从中创建一个圆圈(有点像https://www.redblobgames.com/articles/visibility/

我正在使用的结构:

struct Intersect
{
    bool result = false; Vec2 pos; float angle;
};

尝试对其进行排序:

std::stable_sort(points.begin(), points.end(), [&playerPos](const Intersect& lhs, const Intersect& rhs)
{

    if (playerPos.y < lhs.pos.y)
    {
        if (lhs.pos.x < playerPos.x)
        {
            return  lhs.pos.x < rhs.pos.x;
        }
        else
        {
            return lhs.pos.y > rhs.pos.x;
        }
    }
    else
    {
        return lhs.pos.x > rhs.pos.x;
    }
});

playerPos是一个简单Vec2xy

points是前面代码中填充的相交向量。

通过这种尝试,我主要得到了无效的比较器,因为我认为它不是严格的弱排序。

标签: c++sfml

解决方案


推荐阅读