Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何计算纵横比_C#_Asp.net_Aspect Ratio - Fatal编程技术网

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; 你需要找到最

我对编程比较陌生。我需要从给定的维度(比如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;

你需要找到最大公约数,然后用它除以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。