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

How do I determine a rectangle on the basis of the given lengths?

本文关键字:何根      更新时间:2023-10-16

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

  1. 将边的 4 个边作为大小为 4 的数组的输入;

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

  3. for(int i=0;I<2;i+=2) { if(a[i] != a[i+1]) { 标志 = 假; 破; } }

但是,在这里我只是检查 4 条边是否是平行四边形。如何更改我的算法,使其检查它是否为矩形

我认为你可以通过以下方式获得它

  1. 首先检查是否只给出了四个唯一点。

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

  3. 那么双方必须满足毕达哥拉斯关系。

矩形(与三角形不同)不是刚性多边形; 这就是为什么如果你只给定四个长度,你就有无限多的可能数字。 例如,在最简单的[1, 1, 1, 1]情况下,我们可以有四边形(矩形)或众多菱形之一(不是)。如果我们把问题陈述为

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]

如果应该保留顺序(我们不能重新排列长度):

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

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

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

注意

仅使用边长,您无法确定菱形是矩形,因为菱形的所有四个边相等,但不是矩形(它未能通过将所有顶点放在一个圆中的测试,因为两个对角线的大小不同),菱形也是如此(它的边等于二乘二, 但是对角线的大小不一样,顶点不在一个共同的圆圈中)

如果您有四个边和两个对角线,则这些边必须通过交替对相等,并且对角线的长度必须相等才能形成矩形。