C#: как рассчитать соотношение сторон

Я относительно новичок в программировании. Мне нужно вычислить соотношение сторон (16: 9 или 4:3) из данного измерения, скажем axb. Как я могу достичь этого с помощью C#. Любая помощь будет высоко оценили.

public string AspectRatio(int x, int y)
{
 //code am looking for
 return ratio
}

спасибо.

4 ответов


вам нужно найти наибольший общий делитель и разделить на него 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 (который можно разделить на два, 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 коэффициенты а .

чистый алгоритм GCD получит 683:384 для 1366x768 причина 683 является простой, в то время как разрешение почти 16:9 (16.0078125).

полагаю, что для реальных задач потребуется реализовать достаточно сложный алгоритм:

сначала попробуйте известные соотношения сторон (посмотрите их на Википедия), позволяя некоторые ошибки и только затем использовать GCD в качестве резервного.

не забываем про 32:10 ;-)


вам нужно найти GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor) а потом:

return x/GCD + ":" + y/GCD;