如何根据给定的长度确定矩形?

时间:2018-01-07 10:33:53

标签: c++ algorithm math

如果我有四面给我,我如何确定这四面是否形成一个矩形? 目前,我正在做的是:

  1. 将4面边作为4号数组的输入;

  2. sort(array,array+4)对数组进行排序

  3. for(int i = 0; i< 2; i + = 2) {     if(a [i]!= a [i + 1])     {         flag = false;         打破;     } }

  4. 但是,我只是检查4边是否是平行四边形。如何更改我的算法,以便检查它是否为矩形

3 个答案:

答案 0 :(得分:1)

我认为你可以通过

获得它
  1. 首先检查是否只有四个唯一的点。

  2. 其次,计算所有对距离必须得到最大三个不同的值。每个对角线一个,两个两个。

  3. 然后双方必须履行毕达哥拉斯关系。

答案 1 :(得分:1)

矩形(不像三角形)而不是刚性多边形;这就是为什么如果你只有四个长度,你有无数多可能的数字。例如。在最简单的[1, 1, 1, 1]情况下,我们可以有方形(矩形)或众多rhombs中的一个()。如果我们将问题说明为

  If any rectangle can be constructed with given lengths (lengths can be used in arbitrary order)

我们可以这样解决它

  1. 获取所有四个长度
  2. 按升序排序
  3. 检查length[0] > 0(所有长度都是正数)
  4. 检查length[0] == length[1] && length[2] == length[3]
  5. 如果订单应该保留(我们可以重新排列长度):

    1. 获取所有四个长度
    2. 检查(循环中)length[i] > 0(所有长度都是正数)
    3. 检查length[0] == length[2] && length[1] == length[3]

答案 2 :(得分:1)

对于矩形,您必须检查相对的两侧(没有公共顶点)是否相等,并且两个对角线(也没有公共顶点)也是相似的。如果你检查了所有的可能性,你会发现共同的属性是没有公共点的顶点之间的所有段的可能性必须是相同的长度(边对和两个对角线)

另一种更简单的方法是检查所有顶点是否在一个公共圆(中心位于矩形中心),这是两个对角线的共同点,假设您在P1,P2,P3和P4处有顶点:得到中点C1 =(P1 + P3)/ 2和C2 =(P2 + P4)/ 2(C1必须等于C2)。如果您的图形是矩形,则所有四个顶点必须位于中心C1 == C2 == C的圆中。此外,所有点都必须为圆形。所以dist(Pi,C)必须是相同的。我认为这是检查它们是否形成矩形的最直接方法。

只有边长不能确定cuadrilateral是一个矩形,因为菱形的四边都相等,但不是一个矩形(它不能测试所有顶点是否为圆形,因为两个对角线的大小不同)并且对于菱形来说也是如此(它的边等于2乘2,但是对角线的大小不同,顶点不会落在公共圆中)

如果你有四个边和两个对角线,那么边必须等于交替对,并且对角线的长度必须相等才能形成一个矩形。