我的初始程序被设计为从用户那里获取几何对象的类型,然后获取每条线的坐标以计算形状的面积。它有一个问题,就是每当我要求用户输入构成一条线的两个坐标时,第二个坐标将再次重复,作为下一行的第一个坐标。
示例: 他将输入的第一行0 0 0 1(代表x1 y1 x2 y2) 第二行输入为0 1 1 0(x2 y2 x3 y3)
您可以看到再次重复了0 1,这在程序的第一阶段不是问题。
第二阶段,当我尝试升级程序时,我开始从以下格式的文件中获取输入:矩形,(42,25),(68,25),(68,70),(42,70)< / p>
我可以使用
单独读取每个坐标fscanf(file, "(%lf,%lf)", &X, &Y);
但是我该如何再次获取第二个坐标,并像上面示例中所解释的那样,在下一个输入中重复它。
旧类方法
Point::Point(double x, double y)
{
X = x;
Y = y;
}
Point::Point()
{
cout << "Point constructor called! enter the x and y co-ordinates" << endl;
cin >> X >> Y;
//this is what I want to modify
}
double operator-(const Point& Start, const Point& End)
{
// returns the distance between two points
return sqrt(pow((End.X - Start.X), 2.0) + pow((End.Y - Start.Y), 2.0));
}
答案 0 :(得分:0)
恕我直言,您应该重载operator>>
才能读取坐标:
struct Coordinate
{
double x;
double y;
friend std::istream& operator>>(std::istream& input, Coordinate& co);
};
std::istream& operator>>(std::istream& input, Coordinate& co)
{
char c;
input >> c; '('
input >> co.x;
input >> c; ','
input >> co.y;
input >> c; ')'
return input;
}
接下来,您可以将坐标读入到容器中
std::vector<Coordinate> points;
Coordinate p;
while (input_file >> p)
{
points.push_back(p);
char c;
input_file >> c;
}
您可以通过添加其他方法来扩展坐标结构:
struct Coordinate
{
//...
// Calculate y1 - this
double absolute_distance(const Coordinate& y1) const;
};
double
Coordinate ::
absolute_distance(const Coordinate& y1) const
{
const double x_diff(y1.x - x);
const double y_diff(y1.y - y);
const double x_diff_squared(x_diff * x_diff);
const double y_diff_squared(y_diff * y_diff);
return abs(sqrt(x_diff_squared + y_diff_squared));
}
这将允许您计算两个坐标之间的距离:
double distance = points[1].absolute_distance(points[0]);
按照这种方法,您应该能够计算出4个坐标的面积。