8.8. Геометрические типы#
8.8. Геометрические типы #
Геометрические типы данных представляют двухмерные пространственные объекты. Таблица 8.20 показывает доступные геометрические типы в Tantor SE-1C.
Таблица 8.20. Геометрические типы
Имя | Размер хранилища | Описание | Представление |
---|---|---|---|
point | 16 байт | Точка на плоскости | (x,y) |
line | 24 байта | Бесконечная линия | {A,B,C} |
lseg | 32 байта | Конечный отрезок прямой | ((x1,y1),(x2,y2)) |
box | 32 байта | Прямоугольная рамка | ((x1,y1),(x2,y2)) |
path | 16+16n байт | Замкнутый путь (аналогично полигону) | ((x1,y1),...) |
path | 16+16n байт | Открыть путь | [(x1,y1),...] |
polygon | 40+16n байт | Полигон (аналогично замкнутому пути) | ((x1,y1),...) |
circle | 24 байта | Круг | <(x,y),r> (точка центра и радиус) |
Во всех этих типах отдельные координаты хранятся как
double precision
(float8
) числа.
Доступен богатый набор функций и операторов для выполнения различных геометрических операций, таких как масштабирование, перевод, поворот и определение пересечений. Они объясняются в Раздел 9.11.
8.8.1. Точки #
Точки - это основной двумерный строительный блок для геометрических типов. Значения типа point
указываются с использованием одного из следующих синтаксисов:
(x
,y
)x
,y
где x
и y
- соответствующие координаты, представленные в виде чисел с плавающей точкой.
Точки выводятся с использованием первого синтаксиса.
8.8.2. Линии #
Линии представлены линейным уравнением A
x + B
y + 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
)
8.8.3. Линейные сегменты #
Отрезки представляются парами точек, которые являются конечными точками отрезка. Значения типа lseg
задаются с использованием любого из следующих синтаксисов:
[ (x1
,y1
) , (x2
,y2
) ] ( (x1
,y1
) , (x2
,y2
) ) (x1
,y1
) , (x2
,y2
)x1
,y1
,x2
,y2
где
(
и
x1
,y1
)(
являются конечными точками отрезка.
x2
,y2
)
Отрезки линий выводятся с использованием первого синтаксиса.
8.8.4. Коробки #
Коробки представлены парой точек, которые являются противоположными
углами коробки.
Значения типа box
указываются с использованием любого из следующих
синтаксисов:
( (x1
,y1
) , (x2
,y2
) ) (x1
,y1
) , (x2
,y2
)x1
,y1
,x2
,y2
где
(
и
x1
,y1
)(
являются любыми двумя противоположными углами прямоугольника.
x2
,y2
)
Коробки выводятся с использованием второго синтаксиса.
Любые два противоположных угла можно указать на входе, но значения будут переупорядочены по необходимости для сохранения верхнего правого и нижнего левого углов, в таком порядке.
8.8.5. Пути #
Пути представлены списками связанных точек. Пути могут быть открытыми, где первая и последняя точки в списке считаются несвязанными, или замкнутыми, где первая и последняя точки считаются связанными.
Значения типа path
указываются с использованием одного из следующих синтаксисов:
[ (x1
,y1
) , ... , (xn
,yn
) ] ( (x1
,y1
) , ... , (xn
,yn
) ) (x1
,y1
) , ... , (xn
,yn
) (x1
,y1
, ... ,xn
,yn
)x1
,y1
, ... ,xn
,yn
где точки являются конечными точками отрезков линии, составляющих путь. Квадратные скобки ([]
) указывают на открытый путь, а круглые скобки (()
) указывают на закрытый путь. Когда внешние скобки не указаны, как в третьем до пятого синтаксисах, предполагается закрытый путь.
Пути выводятся с использованием первого или второго синтаксиса, в зависимости от ситуации.
8.8.6. Многоугольники #
Многоугольники представлены списками точек (вершин многоугольника). Многоугольники очень похожи на замкнутые пути; основное семантическое различие заключается в том, что многоугольник считается включающим область внутри него, тогда как путь - нет.
Важное различие в реализации между многоугольниками и путями заключается в том, что хранимая репрезентация многоугольника включает его наименьший ограничивающий прямоугольник. Это ускоряет некоторые поисковые операции, хотя вычисление ограничивающего прямоугольника добавляет накладные расходы при создании новых многоугольников.
Значения типа polygon
указываются с использованием любого из следующих синтаксисов:
( (x1
,y1
) , ... , (xn
,yn
) ) (x1
,y1
) , ... , (xn
,yn
) (x1
,y1
, ... ,xn
,yn
)x1
,y1
, ... ,xn
,yn
где точки являются конечными точками отрезков, составляющих границу полигона.
Многоугольники выводятся с использованием первого синтаксиса.
8.8.7. Круги #
Круги представлены центральной точкой и радиусом.
Значения типа circle
указываются с использованием любого из
следующих синтаксисов:
< (x
,y
) ,r
> ( (x
,y
) ,r
) (x
,y
) ,r
x
,y
,r
где
(
является центральной точкой, а x
,y
)r
- радиусом
окружности.
Круги выводятся с использованием первого синтаксиса.