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;