2015-05-27 2 views
0

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

x0 y0

x1 y1

....

Затем найдите центр и диаметр самого маленького ограждающей круга. Но я застрял в начале. Я не знаю, как удерживать координаты и решил выбрать массив структур. Я прочитал координаты в структуре. Я собираюсь сделать 4 условия:

1 - Существует одна точка, и вы не можете найти наименьший замкнутый круг.

2 - Есть 2 очка. Теперь задача найти расстояние между ними и его центром.

3 - Есть 3 очка.

4 - более 3-х баллов. Использование специального алгоритма

Я попытался использовать вектор. Я не знаю, как использовать свои точки (элементы вектора) в конце функций и т.д.

#include "stdafx.h" 
#include <stdio.h> 
#include <fstream> 
#include <iostream> 
#include <vector> 

using namespace std; 

// Distance 
float distance(){ 
    return sqrt((point[0].x * point[1].x) + (point[0].y * point[1].y)); 
} 

struct Points 
{ 
    float x, y; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
vector<Points> point; 
Points tmp; 

ifstream fin("Points.txt"); 

if (!fin.is_open()) 
    cout << "Cannot open the file \n"; 
else{ 
    while (fin >> tmp.x >> tmp.y){ 
     point.push_back(tmp); 
     cout << tmp.x << tmp.y << endl; 
    } 
    fin.close(); 

} 

return 0; 
} 
+0

я не делаю см. проблему, кроме ограничения размера фиксированного массива. Поскольку это C++, вы можете использовать 'vector' или простой' list' и использовать 'push_back' для хранения каждой из ваших точек. Можете ли вы изменить свой вопрос и добавить функцию, с которой вы столкнулись? – usr2564301

+0

Ваша проблема в том, что вы не можете получить доступ к вашему массиву точек в вашей функции 'distance'? – Ventu

+0

Спасибо, я попытался использовать вектор. – Asm

ответ

2

Я бы назвал STRUCT что-то вроде Point, а не Points, так как один экземпляр структуры содержит только один пара координат х, у.

Тогда подходящая функция расстояния может быть что-то вроде

float distance(const Point& point1, const Point& point2) 
{ 
    return sqrt((point1.x * point2.x) + (point1.y * point2.y)); 
} 

Вы можете получить расстояние между любыми двумя точками в вашем входе установлен так:

distance(point[i], point[j]) 

Вы также можете измерить расстояние от ваших входных точек до точка, которая не находится в комплекте, например, точка, где вы думаете, что центр круга может быть. Например,

distance(point[i], candidate_center_of_circle) 

Если бы это был мой код, я бы, вероятно, сделать Point класс и дать ему функцию в члена на расстоянии, так что я мог бы написать что-то вроде

candidate_center_of_circle.distanceTo(point[i]) 

Кстати, I может имя переменной points, а не point , поскольку это вектор, который содержит несколько экземпляров Point. Если вы собираетесь писать такие вещи, как point[i] много вы не могли бы points[i], но если вы в основном собираетесь сделать STL итераторы над вектором , то вы бы что-то вроде этого:

for (std::vector<Point>::const_iterator it = points.begin(); it != points.end(); ++it) 
Смежные вопросы