C++ 如果点不是',则计算面积;t分类

C++ 如果点不是',则计算面积;t分类,c++,math,C++,Math,好的,这是我计算四边形面积的代码;这很好: float Pk(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4) { return abs(((x1*y2)-(x2*y1))+((x2*y3)-(x3*y2))+((x3*y4)-(x4*y3))+((x4*y1)-(x1*y4)))/2; } 但问题是,分数没有按任何顺序给出。例如,对于这个四边形 分为以下几点: 9 7 35 7 3 21

好的,这是我计算四边形面积的代码;这很好:

float Pk(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
{
    return abs(((x1*y2)-(x2*y1))+((x2*y3)-(x3*y2))+((x3*y4)-(x4*y3))+((x4*y1)-(x1*y4)))/2;
}
但问题是,分数没有按任何顺序给出。例如,对于这个四边形

分为以下几点:

  • 9 7
  • 35
  • 7 3
  • 210
我不能像这样计算面积(需要找到ABCD的面积)。你知道如何做到这一点吗,不需要尝试所有可能的组合,因为我的程序有点复杂,需要花费很多时间


提前感谢。

在调用面积函数之前,您似乎希望按逆时针顺序对点进行排序

为此,首先查找所有点的边界框的中心。然后找出每个点和中心点之间的角度。根据角度对点列表进行排序


使用已排序的点列表,调用面积函数。

如果要计算给定点的凸包面积,那么简单:计算凸包。然后您将获得船体的排序点。然后用你的算法来计算面积。 凸包计算有很多算法。请看这里:

只是一个随机猜测:计算x&y坐标的平均值,然后计算平均x&y坐标与每个原始点之间的角度。按角度对点进行排序。这在数学上是不可能的。如果我给点(0,0),(5,0),(1,1),(0,4),那么这些点有三个形状,每个形状都有不同的面积。(该问题由凹面外壳触发)您要计算哪个形状的面积?你想计算给定点的凸包面积吗?你是想求一个四边形,还是多边形会更大?如果较大,则首先使用a对点进行排序,然后查找区域。如果凸面外壳不包含所有四个(或任意多个)顶点,请决定要执行的操作--您可以忽略内部点,或者引发错误。如果你只做四边形,你可以用更简单的代码来做等价的事情。@Luka,Rory:四个任意点不能总是被强制到一个凸包中。你可以比使用标准的顺时针排序算法更容易、更有效地得到四边形的凸包(最简单的非平凡情况)。