0

我有一个包含点的 X、Y、Z 坐标的文本文件。我的目标是找到最小和最大点并将其写入另一个文件。为此,我编写了一个距离函数。具有最大距离的点是最小点和最大点。这是我的代码。它可以工作,但它不会计算或写入任何东西。

#include <iostream>
#include<fstream>
#include <math.h>

using namespace std;

double distance (float X1, float Y1, float Z1, float X2, float Y2, float Z2)
{
    return sqrt(pow((X2-X1),2)+ pow((Y2-Y1),2)+pow((Z2-Z1),2));
}

int main ()
{ 
    float x1, y1, z1,x2, y2,z2;
    ifstream file("D:\\points.txt");
    ofstream result ("D:\\result.txt");
    double bigdistance=0;

    if (file.is_open())
    { 
        while (!file.eof())
        {
            file>>x1>>y1>>z1;
            while (!file.eof())
            {
                file>>x2>>y2>>z2;
                double d= distance (x1,y1,z1,x2,y2,z2);
                if (bigdistance<d)
                {
                    bigdistance=d;
                    result<<x1<<y1<<z1<<endl<<x2<<y2<<z2;
                }
            }
        }
    }
    else cout <<"cannot open file";

    system ("PAUSE");
    return 0;
}
4

2 回答 2

0

几个建议:

while (file >> x1 >> y1 >> z1 >> x2 >> y2 >> z2) {

}

如果任何读取失败,将读取您的输入并停止。

您将需要读取整个输入并将其存储在点向量或类似向量中。然后,您可以使用两个嵌套循环来迭代每对点。现在,您的程序假定输入文件包含所有对。也就是说,在内部循环中,从输入中多次读取每个点。

还有一些比二次算法更快的算法,如果你有超过几千个输入点,你可能需要这些算法。参见例如这个 StackOverflow 问题

于 2013-10-15T09:20:03.940 回答
0
#include <iostream>
#include<fstream>
#include <math.h>

using namespace std;
enter code here`{
    for (int i = 1; !f1.eof(); i++)
    {
        int x1, y1, x2, y2, x3, y3, x4, y4);
        read(f1, x1, y1, x3, y3);
        x2 = x3;
        y2 = y1;
        x4 = x1;
        y4 = y3;

        if (y4 > y1)
        {
            a = y1 - y4;
        }
        else
            a = y4 - y1;


        if (x4 > x3)
        {
            b = x4 - x3;
        }
        else
            b = x3 - x4;
    }
}
于 2021-04-10T11:00:27.133 回答