在一个使三维点按X、Y、Z的优先顺序排序的程序基础上,要怎么实现找到最小点(忽略X值,认为三维点是处于x平面的二位坐标),求其他点与该点的斜率,并按斜率从大到小排序,最后输出排列好的点坐标。
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include<sstream>
#include<algorithm>
#include<iomanip>
using namespace std;
class Point {
public:
double x_axis; //X轴坐标
double y_axis; //Y轴坐标
double z_axis; //Z轴坐标
};
//从文件中读出数据
void read_file(vector<Point>& 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<Point>& 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<Point> vstu;
read_file(vstu);
sort(vstu.begin(), vstu.end(), stucmp_desc);
output_info(vstu);
system("pause");
return 0;
}