2016-11-19 4 views
-1

J'essaye de faire un programme qui fait entrer l'utilisateur un paires de coordonnées xy. Le programme doit utiliser les trois points les plus éloignés de (0,0) comme les sommets du triangle. Le programme doit sortir la zone du triangle. Je connais la formule mais j'ai du mal à obtenir les trois points les plus éloignés de (0,0).Zone d'un triangle dans un plan cartésien

Ici, j'ai le code pour trier uniquement les coordonnées x dans l'ordre croissant. Comment trier les paires et obtenir les trois points les plus éloignés? Ou y at-il une meilleure façon de faire ce programme?

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

Répondre

0

Vous pouvez définir une struct Point qui définit une coordonnée au lieu d'avoir deux variables séparées. Avec un operator< sur des points exprimant la distance du centre, vous pouvez utiliser std::sort pour trier les tableaux/vecteurs de Point.

Quelque chose comme:

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

vous aide à trouver les trois points les plus éloignés.

0

Une façon est de trouver le convex hull de ces points, les points les plus éloignés sont les sommets de cette coque convexe, prendre le plus 3 des sommets.

This est une façon de trouver la coque convexe d'un ensemble de points.

Vous pouvez également vérifier this, il peut vous aider à trouver votre chemin dans la résolution de votre problème.