8.8. Геометрические типы#
8.8. Геометрические типы #
Геометрические типы данных представляют двухмерные пространственные объекты. Таблица 8.20 показывает доступные геометрические типы в Tantor BE.
Таблица 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. Линии #
Линии представлены линейным уравнением 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)
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) ,rx,y,r
где
(
является центральной точкой, а x,y)r - радиусом
окружности.
Круги выводятся с использованием первого синтаксиса.