Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];

Вниз

Соотношение сторон.   Найти похожие ветки 

 
eXAAAXe   (2011-06-23 18:21) [0]

привет.
Помогите написать функцию, определяющую соотношение сторон.
мой вариант:


function EqualFloat(const F1, F2: single): boolean;
begin
 Result:= CompareValue(F1, F2) = 0;
end;

function GetAspect(W, H: LongWord): string;
var
 Aspect: single;
begin
 Aspect:= (W / H);
 If EqualFloat(Aspect, 4  / 3)  then Result:= "4x3"      else // 1.33.
 If EqualFloat(Aspect, 5  / 4)  then Result:= "5x4"      else // 1.25.
 If EqualFloat(Aspect, 16 / 9)  then Result:= "16x9"     else // 1.78.
 If EqualFloat(Aspect, 16 / 10) then Result:= "16x10"    else // 1.60.
                                     Result:= "Unknown";
end;


у меня размеры монитора такие: 41 на 26. (Физические см.)
Т.е. 41 / 26 = 1.58 - функция вернут "Ункнавн".
как узнать соотношение моего монитора?


 
Ega23 ©   (2011-06-23 18:44) [1]


> у меня размеры монитора такие: 41 на 26. (Физические см.


41 - простое число. Так что у тебя соотношение 41х26


 
Anatoly Podgoretsky ©   (2011-06-23 19:21) [2]

Формула w/h, у тебя оно 1.58


 
CrytoGen   (2011-06-23 20:24) [3]

у тебя неправильный монитор


 
Inovet ©   (2011-06-23 21:17) [4]

> [3] CrytoGen   (23.06.11 20:24)
> у тебя неправильный монитор

Линейка резиновая, по вертикали её растягивает притяжением, поэтому мерять надо в невесомости.


 
eXAAAXe   (2011-06-23 21:46) [5]


> у тебя неправильный монитор


почему не правильный?
диагональ 19.


 
eXAAAXe   (2011-06-23 21:58) [6]

ok.
перечисляем разрешения через EnumDisplaySettings
функция вернет "Унканвн" для 1280 на 768.

Какое это соотношение???


 
Игорь Шевченко ©   (2011-06-23 22:02) [7]


> Какое это соотношение???


http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)


 
eXAAAXe   (2011-06-23 22:11) [8]


>  Игорь Шевченко ©   (23.06.11 22:02) [7]


Спасибо.


 
Омлет ©   (2011-06-24 08:36) [9]


function GetGCD(m, n: longword): longword;
var
 p, n1, m1: longword;
begin
 if (n = 0) or (m = 0) then
   Result := 0
 else begin
   if m < n then begin
     n1 := m;
     m1 := n;
   end
   else begin
     n1 := n;
     m1 := m;
   end;
   while n1 > 0 do begin
     p := m1 mod n1;
     m1 := n1;
     n1 := p;
   end;
   Result := m1;
 end;
end;

function GetAspect(w, h: LongWord): string;
var
 nod: longword;
begin
 nod := GetGCD(w, h);
 Result := format("%d:%d", [w div nod, h div nod]);
end;


 
eXAAAXe   (2011-06-24 11:56) [10]


> Омлет ©   (24.06.11 08:36) [9]


У меня размеры монитора 41 на 26 см.
Измерял линейкой и брал значения из реестра - цифры одни и те же.

GetAspect возвращает соотношение 41:26 :)
Но такого соотношения нет:
http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0%29

Не подскажите соотношение?


 
eXAAAXe   (2011-06-24 11:57) [11]

GetGCD
Как переводиться GCD?


 
Ega23 ©   (2011-06-24 12:12) [12]


> Как переводиться GCD?


http://lmgtfy.com/?q=GCD


 
SQLEXPRESS   (2011-06-24 12:38) [13]

не понимаю, какой смысл в этом во всем?
причем размеры монитора, когда гораздо важнее размер пикселя матрицы?


 
SQLEXPRESS   (2011-06-24 12:41) [14]

и размерность этой матрицы в пикселях.


 
SQLEXPRESS   (2011-06-24 12:43) [15]

поясню, пусть пиксель будет 1,5х1
тогда 200 на 300 пикселей будет не 2:3, а очень даже 1:1


 
Омлет ©   (2011-06-24 12:49) [16]

> eXAAAXe   (24.06.11 11:56) [10]
> У меня размеры монитора 41 на 26 см.
> Измерял линейкой и брал значения из реестра - цифры одни и те же.


В реестре есть размеры монитора в сантиметрах? Я не понял, чего вы хотите. Озвучьте прикладную задачу.

> Не подскажите соотношение?

Выставьте рекомендованное разрешение для вашего монитора - обычно это максимальное значение в настойках разрешения экрана. Возможно это 1920х1200 или 1600х1024, а может какое другое - зависит от монитора.
Потом эти размеры в пикселях передайте функции GetAspect - она вернет соотношение.

> Как переводиться GCD?

Наибольший общий делитель.


 
eXAAAXe   (2011-06-24 12:50) [17]


> SQLEXPRESS   (24.06.11 12:38) [13]


Суть программы:
1) Узнать размеры монитора. (Уже сделал)
2) Узнать соотношение сторон.

У моего монитора размеры 41 на 26, вот и думай теперь.


 
SQLEXPRESS   (2011-06-24 12:56) [18]

ну тогда тебе сразу уже ответили.

> 41 - простое число. Так что у тебя соотношение 41х26


а то что ты даешь ссылки - это не про размеры монитора. А про графические матрицы в них.


 
eXAAAXe   (2011-06-24 13:02) [19]


> Омлет ©   (24.06.11 12:49) [16]
> В реестре есть размеры монитора в сантиметрах? Я не понял,
>  чего вы хотите. Озвучьте прикладную задачу.


Да есть.
См. EDID, 21 и 22 параметры.


> SQLEXPRESS   (24.06.11 12:56) [18]
> а то что ты даешь ссылки - это не про размеры монитора.
> А про графические матрицы в них.


См. ниже "Компьютерные стандарты".


 
eXAAAXe   (2011-06-24 13:12) [20]


> ну тогда тебе сразу уже ответили.
>
> > 41 - простое число. Так что у тебя соотношение 41х26


У меня монитор не правильный?


 
SQLEXPRESS   (2011-06-24 13:38) [21]

>> У меня монитор не правильный?
тебе виднее

>> См. ниже "Компьютерные стандарты".
Компьютерный стандарт / Название устройства  Разрешение  Соотношение сторон экрана  Пиксели, суммарно

ну и где там про размеры самого монитора?


 
eXAAAXe   (2011-06-24 13:43) [22]


> SQLEXPRESS   (24.06.11 13:38) [21]
>
> >> У меня монитор не правильный?
> тебе виднее


Это вопрос,а не утверждение Же!


> ну и где там про размеры самого монитора?


Название устройства и его разрешения в таблице.


 
SQLEXPRESS   (2011-06-24 13:47) [23]

скажи уже разрешение ,
или хотя бы марку
уже даже мне стало интересно, правильный ли у тебя монитор ;-)

вот например мой -
http://market.yandex.ru/model-spec.xml?modelid=929294&hid=91052

то есть, все понятно, SXGA  1280&#215;1024  5&#247;4


 
eXAAAXe   (2011-06-24 13:57) [24]


> SQLEXPRESS   (24.06.11 13:47) [23]


У меня такой.
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052

1440 x 900 = 8 к 5.
Информация из EDID: 41 на 26 см.

EDID врёт что ли???


 
Palladin ©   (2011-06-24 13:59) [25]

пиксели дело такое... редко идеально квадратное....


 
SQLEXPRESS   (2011-06-24 14:02) [26]

т.е.
WSXGA or WXGA+ (?)  1440&#215;900  16&#247;10  1 296 000
или, сократив на 2, да 8&#247;5.

>> EDID врёт что ли???
может


 
eXAAAXe   (2011-06-24 14:11) [27]

Делал как тут советуют:

http://www.gamedev.ru/code/forum/?id=94134


 
Омлет ©   (2011-06-24 14:34) [28]

> http://www.gamedev.ru/code/forum/?id=94134

Там есть действительно правильный совет:

"Погугли, есть WinAPI функция, которая перечисляет все доступные разрешения для монитора, а не для видеокарты. Берёшь самое максимальное и вычисляешь соотношение сторон."


 
eXAAAXe   (2011-06-24 14:41) [29]


> Омлет ©   (24.06.11 14:34) [28]


Придется, так.


 
SQLEXPRESS   (2011-06-24 14:59) [30]

ну да, откуда-то отсюда начать
http://msdn.microsoft.com/en-us/library/dd162610%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa920775.aspx

а в простейшем варианте я б написал

function GetAspect(W, H: LongWord): string;
var
Aspect: single;
begin
if H = 0 then
begin
  W := GetSystemMetrics(SM_CXSCREEN); // текущее
  H :=  GetSystemMetrics(SM_CYSCREEN);
end;
Aspect:= (W / H);
If EqualFloat(Aspect, 4  / 3)  then Result:= "4x3"      else // 1.33.
If EqualFloat(Aspect, 5  / 4)  then Result:= "5x4"      else // 1.25.
If EqualFloat(Aspect, 16 / 9)  then Result:= "16x9"     else // 1.78.
If EqualFloat(Aspect, 16 / 10) then Result:= "16x10"    else // 1.60.
                                    Result:= "Unknown";
end;


 
Омлет ©   (2011-06-24 15:18) [31]

> SQLEXPRESS   (24.06.11 14:59) [30]

Лучше EnumDisplaySettingsEx.


 
eXAAAXe   (2011-06-24 16:13) [32]


> Омлет ©   (24.06.11 15:18) [31]
> Лучше EnumDisplaySettingsEx.


Можно обычный EnumDisplaySettings.


 
eXAAAXe   (2011-06-25 10:46) [33]

EnumDisplaySettings максимальное возвращает разрешение: 1440 x 1050

А тут:
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052
Максимальное 1440x900.

Кому верить?


 
UP   (2011-06-25 19:14) [34]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
15-1308393220
@!!ex
2011-06-18 14:33
2011.10.16
Задача: Золушка - New Generation


2-1308682465
antonn
2011-06-21 22:54
2011.10.16
Сменить ресурс в EXE


2-1308748384
Alex_C
2011-06-22 17:13
2011.10.16
Как форме перхватить нажание VK_LEFT?


15-1308584554
alexdn
2011-06-20 19:42
2011.10.16
Хост + ms sql


2-1309007537
Maxim-us
2011-06-25 17:12
2011.10.16
TChart style





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский