我对编程比较陌生。我需要从给定的维度(比如axb)计算纵横比(16:9或4:3)。如何使用C#实现这一目标。任何帮助都将深表感谢。
public string AspectRatio(int x, int y)
{
//code am looking for
return ratio
}
感谢。
答案 0 :(得分:8)
你需要找到最大公约数,并用它除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
表 - 宽高比对< / p>
答案 1 :(得分:5)
由于您只需要在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";
}
答案 2 :(得分:3)
只有几个标准比率:4:3
,5:4
,16:10
,16:9
。
GCD
是一个好主意,但至少16:10
比率和1366x768
分辨率会失败。
纯GCD算法将获得683:384
1366x768,因为683是素数,而分辨率几乎是16:9(16.0078125)。
我想,对于实际任务,需要实现相当复杂的算法:
首先尝试已知的宽高比(在wikipedia处查找),允许一些错误,然后才使用GCD作为后备。
不要忘记32:10; - )
答案 3 :(得分:1)
您需要找到GCD(http://en.wikipedia.org/wiki/Greatest_common_divisor)然后:
return x/GCD + ":" + y/GCD;