Как прочитать специально отформатированные координаты из текстового файла, чтобы рассчитать расстояние между ними? - PullRequest
0 голосов
/ 09 апреля 2019

Моя первоначальная программа была разработана для получения типа геометрического объекта от пользователя, а затем принимает координаты каждой линии для вычисления площади формы.У него была одна проблема: каждый раз, когда я просил пользователя ввести две координаты, составляющие линию, вторая координата повторяется снова как первая для следующей строки.

пример: первая строка, которую он введет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)

Я могу прочитать каждую координату отдельно, используя

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

1 Ответ

0 голосов
/ 10 апреля 2019

ИМХО, вам нужно перегрузить 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 координатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...