如果点没有排序,则计算面积

时间:2017-02-25 01:04:41

标签: 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;
}

但问题是没有以任何顺序给出积分。例如,对于此四边形enter image description here

分数如下:

  • 9 7
  • 3 5
  • 7 3
  • 2 10

我无法计算这样的区域(需要找到ABCD区域)。你有没有想过如何做到这一点,没有实际尝试所有可能的组合,因为我的程序有点复杂,需要花费很多时间。

提前致谢。

2 个答案:

答案 0 :(得分:0)

似乎您想在调用区域功能之前按逆时针顺序对点进行排序。

要做到这一点,首先要找到所有点的边界框的中心。然后找到每个点和中心点之间的角度。根据角度对点列表进行排序。

使用已排序的点列表,调用区域功能。

答案 1 :(得分:0)

如果要计算给定点的凸包面积,则简单:计算凸包。然后你将有船体的分拣点。然后只需使用您的算法来计算面积。 凸壳计算有很多算法。看看这里: https://en.wikipedia.org/wiki/Convex_hull_algorithms