У меня есть текстовый файл, который включает в себя 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;
}
Несколько предложений:
while (file >> x1 >> y1 >> z1 >> x2 >> y2 >> z2) {
}
прочитает ваш ввод и остановится, если какое-либо из прочтений не удалось.
Вы захотите прочитать весь ввод и сохранить его в векторе точек или аналогичном. Затем вы можете использовать два вложенных цикла для итерации по каждой паре точек. Прямо сейчас, ваши программы предполагают, что входной файл содержит все пары. То есть, каждая точка считывается несколько раз из ввода во внутреннем цикле.
Существуют также алгоритмы, которые быстрее, чем квадратичные, и вам могут понадобиться те, если у вас более пары тысяч входных точек. См. Например, qaru.site/questions/141789/....