2016-11-19 5 views
-1

사용자 입력을 허용하는 프로그램을 만들려고합니다. 쌍의 xy 좌표가 있습니다. 프로그램은 (0,0)에서 가장 먼 세 점을 삼각형의 정점으로 사용해야합니다. 프로그램은 삼각형의 영역을 출력해야합니다. 나는 그것을위한 공식을 안다. 그러나 나는 (0,0)에서 3 개의 가장 먼 점을 얻는 데 문제가있다.직교 좌표계의 삼각형 영역

여기에는 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을 확인할 수도 있습니다. 문제 해결에 도움이 될 것입니다.