Чтобы перейти из точки А в точку В, необходимо сместиться на 20 единиц вправо и на 10 единиц вниз, помеченных как X и Y на рисунке, так как это обычное обозначение. Можно было бы создать структуру
что хотя обычно горизонтальные и вертикальные координаты обозначаются как координаты х и у (буквы нижнего регистра), соответствующие свойства
Point
обозначаются
X
и
Y
(буквами верхнего регистра), так как обычное соглашение в C# для открытых свойств требует, чтобы их имена начинались с букв верхнего регистра.
PointF
по сути идентична
Point
, за исключением того, что
X
и
Y
имеют тип
float
вместо
int
.
PointF
используется, когда координаты не обязательно являются целыми значениями. Для этих структур определено преобразование типов, поэтому можно неявно преобразовывать из
Point
в
PointF
и явно из
PointF
в
Point
(последнее преобразование явное в связи с риском ошибок округления):
PointF ABFloat = new PointF(20.5F, 10.9F);
Point AB = (Point)ABFloat;
PointF ABFloat2 = AB;
Одно последнее замечание о координатах. В нашем обсуждении
Point
и
PointF
сознательно присутствует неопределенность в отношении единиц измерения. Можно говорить о 20 пикселях вправо и 10 пикселях вниз или о 20 дюймах, или 20 милях. Интерпретация координат полностью принадлежит разработчику.
По умолчанию GDI+ будет представлять единицы измерения как пиксели на экране (или принтере, в зависимости от графического устройства), именно таким образом методы объекта
Graphics
будут представлять любые координаты, которые передаются им в качестве параметров. Например, точка
Point(20, 10)
представляет 20 пикселей вправо по экрану и 10 пикселей вниз. Обычно эти пиксели измеряются от верхнего левого угла клиентской области окна, как было до сих пор в рассмотренных примерах. Но это не всегда так, в некоторых ситуациях может потребоваться нарисовать относительно верхнего левого угла всего окна (включая границу) или даже относительно верхнего левого угла экрана. В большинстве случаев, однако, если документация не говорит обратное, можно предполагать, что речь идет о пикселях относительно верхнего левого угла клиентской области.
Мы вернемся к рассмотрению этого вопроса после изучения прокрутки экрана, когда речь пойдет об использовании трех различных координатных систем: мировых, страницы и устройства.
Size и SizeF
Подобно
Point
и
PointF
размеры выступают в двух вариантах. Структура
Size
предназначена для работы с целыми значениями,
SizeF
— для значений с плавающей точкой. В остальном
Size
и
SizeF
идентичны. Мы сосредоточимся здесь на структуре
Size
.
Во многом
Size
аналогична структуре
Point
. Она имеет два целых свойства, которые представляют горизонтальное и вертикальное расстояния, основное различие состоит в том, что вместо
X
и
Y
эти свойства называются
Width
и
Height
. Можно представить предыдущую диаграмму с помощью кода:
Этот код, выполняемый как простое консольное приложение, создает следующий вывод:
Отметим, что этот вывод показывает также, как метод
ToString
объектов
Point
и
Size
был переопределен для вывода значения в формате {X, Y}.
Аналогично можно вычесть
Size
из
Point
, чтобы задать
Point
, или складывать два размера
Size
, задавая другой размер
Size
. Однако невозможно сложить точку
Point
с другой точкой
Point
. Компания Microsoft определила, что такое действие не имеет концептуального смысла, поэтому было решено не создавать никакою перезагружаемого оператора + который бы позволял это сделать.