如果我有四个边给我,我如何确定这四个边是否形成一个矩形?目前,我所做的是:
sort(array,array+4)排序但是,这里我只是检查这四个边是否是平行四边形。如何更改我的算法,使其检查它是否为矩形
发布于 2018-01-07 10:48:07
我想你可以通过
发布于 2018-01-07 12:40:46
矩形(不像三角形)不是刚性的多边形;这就是为什么如果只给你四个长度,你就有无限多的可能的数字。例如,在最简单的[1, 1, 1, 1]情况下,我们可以有方形(矩形)或众多菱形中的一个(不是)。如果我们把这个问题说成
If any rectangle can be constructed with given lengths (lengths can be used in arbitrary order)我们可以用这种方法解决它
length[0] > 0 (所有长度都为正)length[0] == length[1] && length[2] == length[3]如果秩序被保留(我们不能重新排列长度):
length[i] > 0 (所有长度均为正)length[0] == length[2] && length[1] == length[3]发布于 2018-01-09 09:18:58
对于矩形,您必须检查对边(没有公共顶点)是否相等长度,以及两个对角线(也没有公共顶点)是否相似。如果你检查所有的可能性,你会发现共同的属性是没有公共点的顶点之间的分段的所有可能性都必须是相同的长度(边对和对角对齐)
另一种更简单的方法是检查所有顶点是否都在一个公共圆中(中心位于矩形中心),这是两个对角线的公共点,假设在P1、P2、P3和P4有顶点:得到中点C1 = (P1 + P3)/2和C2 = (P2 + P4)/2 (C1必须相等C2)。如果您的图形是矩形,则所有四个顶点都必须位于一个中心为C1 == C2 == C的圆中,而且所有点都必须位于一个圆内。所以dist(Pi,C)必须是相同的。我认为这是检查它们是否形成矩形的最直接的方法。
备注
只具有边长,您无法确定角边是矩形,因为菱形的四边都相等,但不是矩形(它通过了圆中所有顶点的测试,因为两个对角线都不是相同的大小),对于菱形(它的边等于二乘二,但对角不是相同的大小,顶点也不属于一个共同的圆)。
如果有四个边,也有两个对角线,则边必须由交替对相等,对角必须是相等的长度,才能形成矩形。
https://stackoverflow.com/questions/48136293
复制相似问题