Физическая система координат
На рис. 2.1 показана физическая система координат для экрана видеомонитора.
Рис. 2.1. Физическая система координат для экрана видеомонитора
Начало этой системы координат располагается в левом верхнем углу экрана. Ось X направлена слева направо, ось Y - сверху вниз. В качестве единицы длины в данной системе координат используется пиксел.
Для того чтобы определить физическое разрешение устройства вывода (например, размер экрана в пикселах по вертикали и горизонтали), следует использовать функцию GetDeviceCaps , которую мы рассмотрели в 11 томе "Библиотеки системного программиста". Если передать в качестве второго параметра этой функции значения VERTRES и HORZRES , она в любом режиме отображения вернет, соответственно, размер экрана в пикселах по вертикали и по горизонтали. Параметр hdc должен указывать информационный контекст или контекст отображения, связанный с экраном монитора:
HDC hdc; int iVertRes, iHorzRes; hdc = CreateDC("DISPLAY", NULL, NULL, NULL); iVertRes = GetDeviceCaps(hdc, VERTRES); iHorzRes = GetDeviceCaps(hdc, HORZRES); DeleteDC(hdc);
Физическая система координат "привязана" к физическому устройству вывода, поэтому при ее использовании для вывода изображения следует учитывать особенности видеоконтроллера. В 11 томе "Библиотеки системного программиста" в разделе, посвященном метрикам операционной системы Windows, мы подробно рассказали об использовании функции GetDeviceCaps для исследования пространственных характеристик монитора. Для удобства мы воспроизведем приведенную в этом томе таблицу некоторых метрик для видеомониторов различных типов.
Параметр функции GetDeviceCaps | CGA | EGA | VGA | SVGA 800x 600 | 8514/A | SVGA 1024 x 768 |
HORZRES | 640 | 640 | 640 | 800 | 1024 | 1024 |
VERTRES | 200 | 350 | 480 | 600 | 760 | 768 |
HORZSIZE | 240 | 240 | 208 | 208 | 280 | 208 |
VERTSIZE | 180 | 175 | 156 | 152 | 210 | 152 |
ASPECTX | 5 | 38 | 36 | 36 | 10 | 36 |
ASPECTY | 12 | 48 | 36 | 36 | 14 | 36 |
ASPECTXY | 13 | 61 | 51 | 51 | 14 | 51 |
LOGPIXELSX | 96 | 96 | 96 | 96 | 120 | 96 |
LOGPIXELSY | 48 | 72 | 96 | 96 | 120 | 96 |
Из этой таблицы видны недостатки физической системы координат.
Во-первых, вертикальное (VERTRES) и горизонтальное (HORZRES) разрешение зависит от типа видеоконтроллера.
Во-вторых, физические размеры пикселов (ASPECTX и ASPECTY ), и, что самое главное, отношение высоты и ширины пиксела также зависят от типа видеоконтроллера.
Если приложению требуется нарисовать, например, окружность или квадрат, при использовании физической системы координат придется учитывать форму пикселов, выполняя масштабирование изображения по одной из осей координат. В противном случае вместо окружности и квадрата на экране появятся эллипс и прямоугольник.