だから私はソートしようとしている頂点のベクトルを持っていて、述語を使うのは初めてです。これは、頂点をソートするために現在行っていることです。
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:
};
エラーが発生した場合、これは正しく設定しなかったことが原因であると確信しています。誰か助けてくれませんか?