问题描述
如何实现评估两个给定矩形长宽比方差的函数
所附图片有一些矩形。
对于我个人而言,矩形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
和{{1}之间的差异}是E
。
这是我试图编写的代码,这里有两种方法,我知道如何开始,但我不知道如何继续实现它们。
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
完全不同,长宽比不相等。
解决方法
您需要一个描述长宽比的数字,其中:
- 宽度和高度对称,因此,如果您将宽度切换为高度,则会得到带有相反符号的相同数字。平方必须为零
- 如果宽度和高度乘以相同的常数,则数字不会改变
您可以弥补问题。令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)也可以,并且在大小上与正常的长宽比相似。
,给出一个边为a
和b
的矩形,只需将比率计算为:
var ratio = a > b ? b/a : a/b;
矩形的方向似乎与所需的比率无关,因此必须提出方向不可知的比率。最简单的方法是始终将短边除以长边(或者相反,关键是一致性)。