Насколько я понимаю, вы ищете подходящее решение соотношения сторон integer:integer
, такое как 16:9
, а не решение float:1
, такое как 1.77778:1
.
Если да, то вам нужно найти наибольший общий делитель (НОД) и разделить на него оба значения. НОД — это наибольшее число, на которое оба числа делятся без остатка. Таким образом, НОД для чисел 6 и 10 равен 2, НОД для чисел 44 и 99 равен 11.
Например, НОД монитора 1024x768 равен 256. Если разделить оба значения на это, получится 4x3 или 4:3.
Алгоритм (рекурсивный) GCD:
function gcd (a,b):
if b == 0:
return a
return gcd (b, a mod b)
In C:
static int gcd (int a, int b) {
return (b == 0) ? a : gcd (b, a%b);
}
int main(void) {
printf ("gcd(1024,768) = %d\n",gcd(1024,768));
}
И вот некоторый полный HTML/Javascript, который показывает один из способов определения размера экрана и расчета соотношения сторон на его основе. Это работает в FF3, я не уверен, что другие браузеры поддерживают screen.width
и screen.height
.
<html><body>
<script type="text/javascript">
function gcd (a, b) {
return (b == 0) ? a : gcd (b, a%b);
}
var w = screen.width;
var h = screen.height;
var r = gcd (w, h);
document.write ("<pre>");
document.write ("Dimensions = ", w, " x ", h, "<br>");
document.write ("Gcd = ", r, "<br>");
document.write ("Aspect = ", w/r, ":", h/r);
document.write ("</pre>");
</script>
</body></html>
Он выводит (на мой странный широкоэкранный монитор):
Dimensions = 1680 x 1050
Gcd = 210
Aspect = 8:5
Другие, на которых я тестировал это:
Dimensions = 1280 x 1024
Gcd = 256
Aspect = 5:4
Dimensions = 1152 x 960
Gcd = 192
Aspect = 6:5
Dimensions = 1280 x 960
Gcd = 320
Aspect = 4:3
Dimensions = 1920 x 1080
Gcd = 120
Aspect = 16:9
Я бы хотел, чтобы последний был у меня дома, но нет, к сожалению, это рабочая машина.
Другое дело, что вы будете делать, если обнаружите, что соотношение сторон не поддерживается вашим инструментом изменения размера графики. Я подозреваю, что лучше всего было бы добавить линии почтового ящика (например, те, которые вы видите вверху и внизу вашего старого телевизора, когда вы смотрите на нем широкоэкранный фильм). Я бы добавлял их сверху/снизу или по бокам (в зависимости от того, что приводит к наименьшему количеству строк почтового ящика), пока изображение не будет соответствовать требованиям.
Одна вещь, которую вы, возможно, захотите принять во внимание, — это качество изображения, которое было изменено с 16: 9 на 5: 4 — я до сих пор помню невероятно высоких, худых ковбоев, которых я смотрел в юности по телевизору до того, как был введен почтовый ящик. Возможно, вам будет лучше иметь одно другое изображение для каждого соотношения сторон и просто изменить размер правильного изображения в соответствии с фактическими размерами экрана, прежде чем отправлять его по сети.
person
paxdiablo
schedule
27.07.2009