2016-11-19 4 views
-1

Я пытаюсь сделать программу, которая вводит пользователя a пары координат xy. Программа должна использовать три самые далекие точки из (0,0) в качестве вершин треугольника. Программа должна выводить область треугольника. Я знаю формулу для него, но у меня возникают проблемы с получением трех самых дальних точек (0,0).Площадь треугольника в декартовой плоскости

Здесь у меня есть код для сортировки только координаты x в порядке возрастания. Как отсортировать пары и получить три самые большие точки? Или есть ли лучший способ сделать эту программу?

int main() { 
    int x, a, b, t; 
    cin >> a; // a pairs of x and y 
    int xcoor[a], ycoor[a]; 
    for (x = 1; x <= a; x++) 
    { 
     //enter coordinates 
     cin >> xcoor[x] >> ycoor[x]; 
    } 
    for (x = 0; x < a; x++) 
    { 
     for (int y = 0; y < a - 1; y++) 
     { 
      if (xcoor[y] > xcoor[y + 1]) 
      { 
       t = xcoor[y]; 
       xcoor[y] = xcoor[y + 1]; 
       xcoor[y + 1] = t; 
      } 
     } 
    } 
    return 0; 
} 

ответ

0

Вы можете определить struct Point, который определяет координату вместо двух разделенных переменных.

С operator< по точкам, выражающим расстояние от центра, вы можете использовать std::sort для сортировки массивов/векторов Point.

Что-то вроде:

struct Point { 
    int x, y; 

    bool operator<(const Point& src) const 
    { return x*x + y*y < src.x*src.x + src.y*src.y; // or anything else 
    } 
}; 

int main() { 
    int x,a,b,t; 
    cin>>a; // a pairs of x and y 
    Point point[a]; // be careful, it is a gcc extension since a is not a compilation constant 
    for (x=0; x<a; x++) // be careful, arrays in C/C++ starts from 0! 
    { 
    //enter coordinates 
    cin>>point[x].x>>point[x].y; 
    } 
    std::sort(&point[0], &point[a]); 
    return 0; 
} 

поможет вам найти три отдаленные точки.

0

Один из способов - найти convex hull этих точек, а самые дальней точки - вершины этого выпуклого корпуса, возьмите самые дальние 3 вершины.

This - один из способов найти выпуклую оболочку набора точек.

Вы также можете проверить: this, это может помочь вам найти решение проблемы.

Смежные вопросы