【C++】二维点排序

在一个使三维点按X、Y、Z的优先顺序排序的程序基础上,要怎么实现找到最小点(忽略X值,认为三维点是处于x平面的二位坐标),求其他点与该点的斜率,并按斜率从大到小排序,最后输出排列好的点坐标。
#include
#include
#include
#include
#include
#include
#include
using namespace std;

class Point {
public:
    double x_axis;  //X轴坐标
    double y_axis;  //Y轴坐标
    double z_axis;  //Z轴坐标

};

//从文件中读出数据
void read_file(vector& vstu) {
    string line, first_line;
    Point poi;
    int i = 0;

    ifstream in("C:\\Users\\a1837\\Desktop\\rotate-test.txt", ios::in);

    while (getline(in, line))
    {
        istringstream stream(line);
        stream >> poi.x_axis >> poi.y_axis >> poi.z_axis;
        vstu.push_back(poi);
        i++;
    }
    in.close();
}

bool stucmp_desc(const Point& a, const Point& b) {
    if (a.y_axis < b.y_axis) return true;
    else if (a.y_axis > b.y_axis) return false;
    else if (a.z_axis < b.z_axis) return true;
    else return false;

}

void output_info(const vector& vstu)
{

    for (int i = 0; i != vstu.size(); ++i) {
        cout << std::left << setw(12) << vstu[i].x_axis << std::left << setw(12) << vstu[i].y_axis << std::left << setw(12) << vstu[i].z_axis << endl;
    }
}
int main() {
    vector vstu;
    read_file(vstu);
    sort(vstu.begin(), vstu.end(), stucmp_desc);
    output_info(vstu);
    system("pause");
    return 0;
}


最小点要满足什么条件呢?
你要问什么呢?

Point getMinPt(vector<Point>& vstu)
{
    Point pt;
    for (int i = 0; i != vstu.size(); ++i) 
    {
        if(i==0)
            pt = vstu[i];
        else if(pt.y_axis < vstu[i].y_axis)
            pt = vstu[i];
    }
    return pt;
}

float getk(Point minPt,Point p)
{
    return (p.z_axis-minPt.z_axis)/(p.y_axis-minPt.y_axis);  //这里要考虑,如果y值相等,斜率怎么算???
}

void sorts(vector<Point>& vstu,Point minPt)
{
    vector<float> k;
    for (int i = 0; i != vstu.size(); ++i) 
    {
         k.push_back(getk(minPt.vstu[i]);
    }
    for(int i=0;i<k.size()-1;i++)
    {
        for(int j=0;j<k.size()-i-1;j++)
        {
              if(k[j] < k[j+1])
              {
                  float f = k[j];
                  k[j] = k[j+1];
                  k[j+1] = f;
                  Point p = vstu[j];
                  vstu[j] = vstu[j+1];
                  vstu[j+1] = p;
              }
        }
    }
}