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

Function for calculating variance of aspect ratio of rectangles

如何实现计算两个给定矩形的纵横比方差的函数

所附图片有一些矩形。

对我个人而言,矩形 B 和矩形 C 之间纵横比的差异似乎与矩形 C 和矩形 [=14] 之间的方差相同=],但在数值上 BC 之间的差异是 0.34,而 CD 之间的差异是 0.5.

如何以编程和数学方式知道矩形 B 与矩形 C 相似,同样矩形 D 与矩形 C 相似?

也可以说矩形A类似于矩形B,就像矩形D类似于矩形E一样,因为方差他们的宽高比是一样的,但是数值上是不行的,因为AB的区别是0.16,而D和[=的区别27=] 是 0.5.

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

class Program
{
    static void Main(string[] args)
    {
        Rectangle A, B, C, D, E;
              
        // First approach
        double maxDiff = ???;
        Console.WriteLine(IsSimilar(B, C, 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和矩形E是完全不同的,长宽比不相等

给定一个边长为 ab 的矩形,简单地计算比率为:

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

矩形的方向似乎与您需要的比率无关,因此您必须想出一个与方向无关的比率;最简单的方法是始终将短边除以长边(或相反,一致性是关键)。

您需要一个描述纵横比的数字,其中:

  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) 也有效,并且在幅度上与正常纵横比有点相似。