私はプログラミングに比較的慣れていません。axb などの特定の寸法からアスペクト比 (16:9 または 4:3) を計算する必要があります。C# を使用してこれを実現するにはどうすればよいですか。どんな助けでも大歓迎です。
public string AspectRatio(int x, int y)
{
//code am looking for
return ratio
}
ありがとう。
私はプログラミングに比較的慣れていません。axb などの特定の寸法からアスペクト比 (16:9 または 4:3) を計算する必要があります。C# を使用してこれを実現するにはどうすればよいですか。どんな助けでも大歓迎です。
public string AspectRatio(int x, int y)
{
//code am looking for
return ratio
}
ありがとう。
最大公約数を見つけ、それで 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";
}
There're only several standard ratios like: 4:3
, 5:4
, 16:10
, 16:9
.
GCD
is a good idea, but it will fail for at least 16:10
ratios and 1366x768
resolution.
Pure GCD algorithm will get 683:384
for 1366x768, cause 683 is a prime, while resolution is almost 16:9 (16.0078125).
I suppose, that for real tasks, one will need to implement rather complicated algorithm:
First try known aspect ratios (look for them at wikipedia), allowing some errors and only then use GCD as fallback.
Don't forget about 32:10 ;-)
GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor) を見つけてから:
return x/GCD + ":" + y/GCD;