我得到了一份任务,因为我真的很挣扎:
编写一个程序,将input-week6-ad-q3.txt(200点的3D坐标)读入数组并报告以下内容 1. point1与其他之间的距离(考虑第一个坐标是point1,第二个点2 ,,,) 2.最接近点1的点和点1与最近点之间的距离。
我试图启动它,但我现在无法获得坐标,我甚至不知道从哪里开始寻找最近的点。任何帮助将非常感激。
这是我到目前为止所得到的:
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 200;
typedef double x_coord[MAX];
typedef double y_coord[MAX];
typedef double z_coord[MAX];
int main()
{
x_coord x;
y_coord y;
z_coord z;
int count;
ifstream in_stream;
in_stream.open("input-week6-ad-q4-2.txt");
in_stream.get(x, y, z);
for (count = 0; count < MAX; count++)
{
x[count] = x;
in_stream.get(x);
y[count] = y;
in_stream.get(y);
z[count] = z;
in_stream.get(z);
}
in_stream.close();
system("pause");
return 0;
}
输入文件的布局如下:
Coordinates of many points
x y z
-0.06325 0.0359793 0.0420873
-0.06275 0.0360343 0.0425949
-0.0645 0.0365101 0.0404362
等。
答案 0 :(得分:0)
回答问题的第二部分,通常2维空间中点之间的距离称为Euclidean distance。
答案 1 :(得分:0)
我们在这里 首先为点创建一个结构: 接下来,重载 接下来,使用 这是输入循环: 您可以在结构中插入距离函数: 上述方法允许您执行以下操作: 编辑1:独立距离功能 将其应用为:struct Point3d
{
double x, y, z;
};
operator>>
以读取点值:struct Point3d
{
double x, y, z;
friend std::istream& operator>>(std::istream& input, Point3d& p);
};
std::istream& operator>>(std::istream& input, Point3d& p)
{
input >> p.x >> p.y >> p.z;
return input;
}
std::vector
创建数据库:
typedef std :: vector Database_Type;
Database_Type数据库; std::string text_line;
// Ignore the header lines
std::getline(my_data, text_line);
std::getline(my_data, text_line);
Point3d p;
while (my_data >> p)
{
database.push_back(p);
}
struct Point3d
{
//...
double distance(const Point3d& p) const;
};
double
Point3d::
distance(const Point3d& p) const
{
const double x_diff_squared = (x - p.x) * (x - p.x);
const double y_diff_squared = (y - p.y) * (y - p.y);
const double z_diff_squared = (z - p.z) * (z - p.z);
return sqrt(x_diff_squared + y_diff_squared + z_diff_squared);
}
const double distance_p1_p2 = database[0].distance(database[1]);
或者,你可以建立一个独立的距离函数:double Distance(const Point3d& p1, const Point3d& p2)
{
const double x_diff_squared = (p1.x - p2.x) * (p1.x - p2.x);
const double y_diff_squared = (p1.y - p2.y) * (p1.y - p2.y);
const double z_diff_squared = (p1.z - p2.z) * (p1.z - p2.z);
return sqrt(x_diff_squared + y_diff_squared + z_diff_squared);
}
const distance_p1_p2 = Distance(database[0], database[1]);