C#:如何计算纵横比
我对编程比较陌生。我需要从给定的维度(比如axb)计算纵横比(16:9或4:3)。如何使用C#实现这一点。任何帮助都将不胜感激C#:如何计算纵横比,c#,asp.net,aspect-ratio,C#,Asp.net,Aspect Ratio,我对编程比较陌生。我需要从给定的维度(比如axb)计算纵横比(16:9或4:3)。如何使用C#实现这一点。任何帮助都将不胜感激 public string AspectRatio(int x, int y) { //code am looking for return ratio } 谢谢。您需要找到GCD(http://en.wikipedia.org/wiki/Greatest_common_divisor)然后: return x/GCD + ":" + y/GCD; 你需要找到最
public string AspectRatio(int x, int y)
{
//code am looking for
return ratio
}
谢谢。您需要找到GCD(http://en.wikipedia.org/wiki/Greatest_common_divisor)然后:
return x/GCD + ":" + y/GCD;
你需要找到最大公约数,然后用它除以x和y
static int GCD(int a, int b)
{
int Remainder;
while( b != 0 )
{
Remainder = a % b;
a = b;
b = Remainder;
}
return a;
}
return string.Format("{0}:{1}",x/GCD(x,y), y/GCD(x,y));
PS
如果您想让它处理16:10(可以除以2,将使用上面的方法返回8:5)之类的内容,您需要一个预定义的
((float)x)/y
-纵横比对的表,因为您只需要在16:9和4:3之间做出决定,所以这里有一个更简单的解决方案
public string AspectRatio(int x, int y)
{
double value = (double)x / y;
if (value > 1.7)
return "16:9";
else
return "4:3";
}
只有几种标准比率,如:
4:3
,5:4
,16:10
,16:9
。
GCD
是个好主意,但它至少会在16:10
比率和1366x768
分辨率上失败
public string AspectRatio(int x, int y)
{
double value = (double)x / y;
if (value > 1.7)
return "16:9";
else
return "4:3";
}
对于1366x768,纯GCD算法将得到683:384
,因为683是素数,而分辨率几乎是16:9(16.0078125)
我认为,对于实际任务,需要实现相当复杂的算法:
首先尝试已知的纵横比(查看),允许出现一些错误,然后才使用GCD作为回退
别忘了;-) 获取@V4Vendetta的宽高比可能的副本,它只包含相同的不太好的解决方案。非常感谢。让我试一试。这对于比率
16:10
…;来说是失败的。)分辨率为1366x768的可怜笔记本用户=(非常感谢。将试用它。由于比率16:10
…;)16:10
也称为8:5
:)非常感谢。是的,像你这样的例外情况很少mentioned@kirilloid我一直在使用GCD,希望能深入了解那些“相当复杂的算法”。你知道从哪里开始做更彻底的事情吗?@TR3B用小数据找到最佳近似值(因此,归根结底,这就是问题的症结所在……如果没有映射就无法涵盖所有规格,为什么我们都在谈论AR的计算?因为纵横比比远低于分辨率。异常更少。祝你列举所有异常好运,尤其是在寻找dp(设备独立像素)的情况下),使用自定义设置,它们只是不支持GCD。