计算矩形纵横比方差的函数

问题描述

如何实现评估两个给定矩形长宽比方差的函数

所附图片有一些矩形。

对于我个人而言,矩形B和矩形C间的长宽比差异与矩形C和矩形D间的差异相同,但在数字上BC间的差异为0.34,而CD间的差异为0.5

如何通过编程和数学方法知道矩形B与矩形C类似,而矩形D与矩形C类似吗?

也可以说矩形A与矩形B相似,就像矩形D与矩形E相似,因为它们的方差宽高比是相同的,但是在数值上无法解决问题,因为AB间的差异为0.16,而D和{{1}之间的差异}是E

enter image description here

这是我试图编写的代码,这里有两种方法,我知道如何开始,但我不知道如何继续实现它们。

0.5

编辑

请注意,矩形的方向与计算有关,因此矩形class Program { static void Main(string[] args) { Rectangle A,B,C,D,E; // First approach double maxDiff = ???; Console.WriteLine(IsSimilar(B,maxDiff)); // True // Second approach Console.WriteLine(GetDifference(B,C) == GetDifference(C,D)); // True } // -------------- First approach -------------- public static bool IsSimilar(Rectangle rectangle1,Rectangle rectangle2,double maxDiff) { var score1 = GetRatioscore(rectangle1); var score2 = GetRatioscore(rectangle2); return Math.Abs(score1 - score2) <= maxDiff; } private static double GetRatioscore(Rectangle rectangle) { ... return ... } // -------------- Second approach -------------- public static double GetDifference(Rectangle rectangle1,Rectangle rectangle2) { var ratio1 = rectangle1.Width / rectangle1.Height; var ratio2 = rectangle2.Width / rectangle2.Height; ... return ... } } 和矩形A完全不同,长宽比不相等。

解决方法

您需要一个描述长宽比的数字,其中:

  1. 宽度和高度对称,因此,如果您将宽度切换为高度,则会得到带有相反符号的相同数字。平方必须为零
  2. 如果宽度和高度乘以相同的常数,则数字不会改变

您可以弥补问题。令F为奇数单调递增函数。然后:

任何F(w / sqrt(w * h))-F(h / sqrt(w * h))有效

任何F(log(w)-log(h))有效

我认为我最喜欢的只是单位面积矩形的宽度和高度之差:(w-h)/ sqrt(w * h)。

(w / h)-(h / w)也可以,并且在大小上与正常的长宽比相似。

,

给出一个边为ab的矩形,只需将比率计算为:

var ratio = a > b ? b/a : a/b;

矩形的方向似乎与所需的比率无关,因此必须提出方向不可知的比率。最简单的方法是始终将短边除以长边(或者相反,关键是一致性)。