1

だから私はソートしようとしている頂点のベクトルを持っていて、述語を使うのは初めてです。これは、頂点をソートするために現在行っていることです。

void Triangulate::OrderVertices()
{
     std::sort(mVertices.begin(), mVertices.end(), Triangulate::ClockWise());
}

そして、これは私のソート述語です

bool Triangulate::ClockWise::operator()(const CVertex2& pointA, const CVertex2& pointB)
{
    if(pointA.mPoint.x >= 0 && pointB.mPoint.x < 0)
    {
        return true;
    }

    if(pointA.mPoint.x == 0 &&  pointB.mPoint.x == 0)
    {
        return true;
    }

        // Gets the center of my current viewport
    CVertex2 centerCoordinate(CClipper::Instance()->GetMidX(), CClipper::Instance()->GetMidY());


    // compute the cross product of vectors
    int det = (int)((pointA.mPoint.x - centerCoordinate.mPoint.x) * 
                    (pointB.mPoint.y - centerCoordinate.mPoint.y) - 
                    (pointB.mPoint.x - centerCoordinate.mPoint.x) *
                    (pointA.mPoint.y - centerCoordinate.mPoint.y));

    if(det < 0)
    {
        return true;
    }

    if(det > 0)
    {
        return false;
    }

    int det1 = (int)((pointA.mPoint.x - centerCoordinate.mPoint.x) * 
                        (pointA.mPoint.x - centerCoordinate.mPoint.x) + 
                        (pointA.mPoint.y - centerCoordinate.mPoint.y) * 
                        (pointA.mPoint.y - centerCoordinate.mPoint.y));

    int det2 = (int)((pointB.mPoint.x - centerCoordinate.mPoint.x) *
                        (pointB.mPoint.x - centerCoordinate.mPoint.x) +
                        (pointB.mPoint.y - centerCoordinate.mPoint.y) *
                        (pointB.mPoint.y - centerCoordinate.mPoint.y));

    return det1 > det2;
}

私は現在、triangulate クラス内に述語を設定しています。

class Triangulate
{
    friend class ClockWise;
public:

    Triangulate(std::vector<CVertex2>& vertices)
        :mVertices(vertices) {}
    ~Triangulate(void);

    class ClockWise
    {
    public:
        bool operator()(const CVertex2& pointA, const CVertex2& pointB);
    };

private:
};

エラーが発生した場合、これは正しく設定しなかったことが原因であると確信しています。誰か助けてくれませんか?

4

0 に答える 0