#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;
}
}
}
}