笛卡尔平面中三角形的面积

时间:2016-11-19 11:23:41

标签: c++ sorting cartesian

我正在尝试创建一个程序,使用户输入 对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;
}

2 个答案:

答案 0 :(得分:0)

您可以定义一个定义坐标的struct Point,而不是两个分开的变量。

如果点上operator<表示距离中心的距离,则可以使用std::sortPoint的数组/向量进行排序。

类似的东西:

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

帮助您找到最远的三个点。

答案 1 :(得分:0)

一种方法是找到这些点的convex hull,最远的点是该凸包的顶点,取最远的3个顶点。

This是找到一组点的凸包的一种方法。

您还可以查看this,它可以帮助您找到解决问题的方法。