C++ 四边形面积

C++ 四边形面积,c++,algorithm,math,C++,Algorithm,Math,我在一个平面上有n个点和一个目标区域p。我试图找到四个点,它们的面积是四边形的角,面积值与p最接近。下面是一个n=5和p=30的示例: 0,0 10,0 0,10 10,10 7,3 答案应该是30.0(与p最接近的一个,在本例中等于) 你知道我该怎么做吗?我知道我可以用Heron公式计算每个四边形的面积,但是我必须尝试每种组合还是有更短的方法?一般来说,我想不出一种算法可以改进最坏情况下对所有可能四边形的迭代。如果与点分布的区域相比,该区域较小,则可以使用一种安排来剔除距离太远而无法形成合

我在一个平面上有n个点和一个目标区域p。我试图找到四个点,它们的面积是四边形的角,面积值与p最接近。下面是一个n=5和p=30的示例:

  • 0,0
  • 10,0
  • 0,10
  • 10,10
  • 7,3
答案应该是30.0(与p最接近的一个,在本例中等于)


你知道我该怎么做吗?我知道我可以用Heron公式计算每个四边形的面积,但是我必须尝试每种组合还是有更短的方法?

一般来说,我想不出一种算法可以改进最坏情况下对所有可能四边形的迭代。如果与点分布的区域相比,该区域较小,则可以使用一种安排来剔除距离太远而无法形成合理四边形的点。但即使在这里,你也要小心,因为一个很薄的四边形,有着很远的点,可能会有合适的面积,所以你可能不得不接受四次算法

但是你可以使用加速:当你有三个点时,找到相关三角形的面积,如果它大于abs(目标面积-目前为止最好的面积),那么你不需要为第四个点尝试任何值

正如我在对四边形区域的评论中提到的,Heron的是三角形。

您可以

  • 获取具有所需顶点数和形状的单元/模板多边形
  • 向其添加乘法比例因子
    t
    ,使其坐标如下所示

    0, 0
    10t, 0
    0, 10t
    10t, 10t
    7t, 3t
    
  • 使用计算区域,例如
    f(t)

  • 为缩放因子
    t
    和多边形的相关坐标求解多项式方程
    f(t)=30.0

  • 这将为您提供所需区域的多边形(
    30.0


    顺便说一下,我假设您知道多边形的形状,否则,有(无限)多个解决方案可以适合您的目标区域

    Heron的公式适用于三角形,它对四边形的自然扩展称为Brahmagupta公式,只适用于循环四边形,而不适用于一般四边形。不过,你可以使用Bretschneider的公式。你需要使用一些三角,我知道Heron的是三角形xd,我以为它的面积是两个三角形。但无论如何,我做了蛮力,用4个for循环。它在我尝试的测试用例中运行良好,所以我希望它也能通过他们的测试。谢谢:)@user3751721是的,你可以做到。很明显他们不会越狱吗?