代码之家  ›  专栏  ›  技术社区  ›  google dev

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

  •  0
  • google dev  · 技术社区  · 6 年前

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

    附图中有一些矩形。

    对我个人来说,矩形在纵横比上的差异 B 矩形 C 与矩形之间的方差相同 C 矩形 D ,但数值上的差异 B 和 C 是 0.34 而两者之间的区别 C 和 D 是 0.5 .

    如何用编程和数学的方法知道矩形 B 与矩形C相似,同样为矩形 D 类似于矩形 C ?

    也可以说矩形 A 类似于矩形 B 就像那个矩形 D 类似于矩形 E ,因为它们的纵横比的方差是相同的,但从数值上讲,这是行不通的,因为它们之间的差异 A. 和 B 是 0.16 ,以及两者之间的区别 D 和 E 是 0.5 .

    enter image description here

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

    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 它们的纵横比完全不同且不相等。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Matt Timmermans    6 年前

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

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

        2
  •  0
  •   InBetween    6 年前

    给定一个有边的矩形 a 和 b ,只需将比率计算为:

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

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