Геометрические типы

Геометрические типы данных представляют собой объекты в двумерном пространстве. В Таблице 20 перечислены геометрические типы, существующие в QHB.

Таблица 20. Геометрические типы

ИмяРазмерОписаниеПредставление
point16 байтТочка на плоскости(x,y)
line32 байтаБесконечная прямая{A, B, C},
lseg32 байтаКонечный отрезок((x1,y1),(x2,y2))
box32 байтаПрямоугольник((x1,y1),(x2,y2))
path16+16n байтЗакрытый путь (подобный многоугольнику)((x1,y1),...)
path16+16n байтОткрытый путь[(x1,y1),...]
polygon40+16n байтМногоугольник (подобный замкнутому пути)((x1,y1),...)
circle24 байтаОкружность<(x,y),r> (центр окружности и радиус)

Для выполнения различных геометрических операций, таких как масштабирование, перемещение, вращение и определение пересечений QHB предоставляет широкий спектр функций и операторов. Они рассматриваются в разделе Геометрические функции и операторы.


Точки

Точки являются основной двумерной структурной единицей для геометрических типов. Значения типа point указываются в одном из следующих форматов:

( x, y )
  x, y

где x и y — соответствующие координаты в виде чисел с плавающей запятой.

Выводятся точки в первом формате.


Прямые

Прямые представлены линейным уравнением Ax + By + C = 0, где A и B не могут быть равны нулю одновременно. Значения типа line вводятся и выводятся в следующем виде:

{ A, B, C }

Как вариант, для ввода можно использовать любую из следующих форм:

[ ( x1, y1 ), ( x2, y2 ) ]
( ( x1, y1 ), ( x2, y2 ) )
  ( x1, y1 ), ( x2, y2 )
    x1, y1  ,   x2, y2

где (x1,y1) и (x2,y2) — это две разные точки на данной прямой.


Отрезки

Отрезок представляется парой точек, которые определяют его конец. Значения типа lseg указываются в любом из следующих форматов:

[ ( x1, y1 ), ( x2, y2 ) ]
( ( x1, y1 ), ( x2, y2 ) )
  ( x1, y1 ), ( x2, y2 )
    x1, y1  ,   x2, y2

где (x1,y1) и (x2,y2) — это конечные точки отрезка.

Выводятся отрезки в первом формате.


Прямоугольники

Прямоугольник представляется парой точек, которые находятся в противоположных его углах. Значения типа box указываются в любом из следующих форматов:

( ( x1, y1 ), ( x2, y2 ) )
  ( x1, y1 ), ( x2, y2 )
    x1, y1  ,   x2, y2

где (x1,y1) и (x2,y2) — это любые два противоположных угла прямоугольника.

Выводятся прямоугольники во втором формате.

При вводе можно указать любые два противоположных угла, но затем значения будут по мере необходимости переупорядочены для хранения в таком порядке: сначала верхний правый, потом нижний левый угол.


Пути

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

Значения типа path указываются в любом из следующих форматов:

[ ( x1, y1 ), ..., ( xn, yn ) ]
( ( x1, y1 ), ..., ( xn, yn ) )
  ( x1, y1 ), ..., ( xn, yn )
  ( x1, y1  , ...,   xn, yn )
    x1, y1  , ...,   xn, yn

где точки являются конечными точками отрезков, составляющих путь. Квадратные скобки ([]) обозначают открытый путь, а круглые скобки (()) — закрытый. Когда внешние скобки опущены, как в форматах с третьего по пятый, предполагается закрытый путь.

Выводятся пути в первом или втором формате, в зависимости от ситуации.


Многоугольники

Многоугольники представляются списками точек (вершин). Многоугольники очень похожи на закрытые пути, но хранятся по-другому и имеют собственный набор вспомогательных функций.

Значения типа polygon указываются в любом из следующих форматов:

( ( x1, y1 ), ..., ( xn, yn ) )
  ( x1, y1 ), ..., ( xn, yn )
  ( x1, y1  , ...,   xn, yn )
    x1, y1  , ...,   xn, yn

где точки являются конечными точками отрезков, составляющих границу многоугольника.

Выводятся многоугольники в первом формате.


Круги

Круги представляются центральной точкой и радиусом. Значения типа circle указываются в любом из следующих форматов:

< ( x, y ), r >
( ( x, y ), r )
  ( x, y ), r
    x, y  , r

где (x,y) — это центральная точка, а r — радиус окружности.

Выводятся круги в первом формате.