Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.16;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.009 c
2-1308885422
Drowsy
2011-06-24 07:17
2011.10.16
Добавление колонки грида в ран-тайм.


2-1309426335
handle
2011-06-30 13:32
2011.10.16
проверка существования атрибутов


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


15-1308896288
eXAAAXe
2011-06-24 10:18
2011.10.16
Полноэкранный режим в Ютубе.


15-1308984778
oleg1963lora
2011-06-25 10:52
2011.10.16
Хост в 40 Гб бесплатно на 48 часов. Возможно ли это?