геометрический_тип + point → геометрический_тип
Добавляет координаты второго аргумента типа point к каждой точке первого аргумента, осуществляя таким образом перенос объекта. Имеется для типов point, box, path и circle. box '(1,1),(0,0)' + point '(2,0)' → (3,1),(2,0)
|
path + path → path
Соединяет два открытых пути (если один из путей замкнутый, возвращает NULL). path '[(0,0),(1,1)]' + path '[(2,2),(3,3),(4,4)]' → [(0,0),(1,1),(2,2),(3,3),(4,4)]
|
геометрический_тип - point → геометрический_тип
Вычитает координаты второго аргумента типа point из каждой точки первого аргумента, осуществляя таким образом перенос объекта. Имеется для типов point, box, path и circle. box '(1,1),(0,0)' - point '(2,0)' → (-1,1),(-2,0)
|
геометрический_тип * point → геометрический_тип
Умножает координаты каждой точки первого аргумента на координаты второго аргумента типа point (координаты точек воспринимаются как комплексные числа с вещественной и мнимой частью, результатом становится их обычное комплексное произведение). Если же рассматривать вторую точку как вектор, данная операция равнозначна умножению размера объекта и расстояния от начала координат на длину вектора с поворотом против часовой стрелки относительно начала координат на угол, равный углу между вектором и осью x. Имеется для типов point, box, path, circle. path '((0,0),(1,0),(1,1))' * point '(3.0,0)' → ((0,0),(3,0),(3,3))
path '((0,0),(1,0),(1,1))' * point(cosd(45), sind(45)) → ((0,0),(0.7071067811865475,0.7071067811865475),(0,1.414213562373095))
|
геометрический_тип / point → геометрический_тип
Делит координаты каждой точки первого аргумента на координаты второго аргумента типа point (координаты точек воспринимаются как комплексные числа с вещественной и мнимой частью, результатом становится их обычное комплексное частное). Если же рассматривать вторую точку как вектор, данная операция равнозначна делению размера объекта и расстояния от начала координат на длину вектора с поворотом по часовой стрелке относительно начала координат на угол, равный углу между вектором и осью x. Имеется для типов point, box, path, circle. path '((0,0),(1,0),(1,1))' / point '(2.0,0)' → ((0,0),(0.5,0),(0.5,0.5))
path '((0,0),(1,0),(1,1))' / point(cosd(45), sind(45)) → ((0,0),(0.7071067811865476,-0.7071067811865476),(1.4142135623730951,0))
|
@-@ геометрический_тип → double precision
Вычисляет общую длину. Имеется для типов lseg, path. @-@ path '[(0,0),(1,0),(1,1)]' → 2
|
@@ геометрический_тип → point
Вычисляет центральную точку. Имеется для типов box, lseg, polygon, circle. @@ box '(2,2),(0,0)' → (1,1)
|
# геометрический_тип → integer
Возвращает количество точек. Имеется для типов path, polygon. # path '((1,0),(0,1),(-1,0))' → 3
|
геометрический_тип # геометрический_тип → point
Вычисляет точку пересечения, а если пересечения нет, возвращает NULL. Имеется для типов lseg, line. lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]' → (0.5,0.5)
|
box # box → box
Вычисляет пересечение двух прямоугольников, а если пересечения нет, возвращает NULL. box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)' → (1,1),(-1,-1)
|
геометрический_тип ## геометрический_тип → point
Вычисляет ближайшую к первому объекту точку, принадлежащую второму объекту. Имеется для следующих пар типов: (point, box), (point, lseg), (point, line), (lseg, box), (lseg, lseg), (line, lseg). point '(0,0)' ## lseg '[(2,0),(0,2)]' → (1,1)
|
геометрический_тип <-> геометрический_тип → double precision
Вычисляет расстояние между объектами. Имеется для всех геометрических типов кроме polygon, для всех сочетаний типа point с другим геометрическим типом, а также для следующих пар типов: (box, lseg), (lseg, line), (polygon, circle) (и пар с обратным порядком). circle '<(0,0),1>' <-> circle '<(5,0),1>' → 3
|
геометрический_тип @> геометрический_тип → boolean
Первый объект содержит второй? Имеется для следующих пар типов: (box, point), (box, box), (path, point), (polygon, point), (polygon, polygon), (circle, point), (circle, circle). circle '<(0,0),2>' @> point '(1,1)' → t
|
геометрический_тип <@ геометрический_тип → boolean
Первый объект содержится во втором? Имеется для следующих пар типов: (point, box), (point, lseg), (point, line), (point, path), (point, polygon), (point, circle), (box, box), (lseg, box), (lseg, line), (polygon, polygon), (circle, circle). point '(1,1)' <@ circle '<(0,0),2>' → t
|
геометрический_тип && геометрический_тип → boolean
Объекты пересекаются? (Для выполнения этого условия достаточно одной общей точки.) Имеется для типов box, polygon, circle. box '(1,1),(0,0)' && box '(2,2),(0,0)' → t
|
геометрический_тип << геометрический_тип → boolean
Первый объект строго слева от второго? Имеется для типов point, box, polygon, circle. circle '<(0,0),1>' << circle '<(5,0),1>' → t
|
геометрический_тип >> геометрический_тип → boolean
Первый объект строго справа от второго? Имеется для типов point, box, polygon, circle. circle '<(5,0),1>' >> circle '<(0,0),1>' → t
|
геометрический_тип &< геометрический_тип → boolean
Первый объект не простирается правее второго? Имеется для типов box, polygon, circle. box '(1,1),(0,0)' &< box '(2,2),(0,0)' → t
|
геометрический_тип &> геометрический_тип → boolean
Первый объект не простирается левее второго? Имеется для типов box, polygon, circle. box '(3,3),(0,0)' &> box '(2,2),(0,0)' → t
|
геометрический_тип <<| геометрический_тип → boolean
Первый объект строго ниже второго? Имеется для типов box, polygon, circle. box '(3,3),(0,0)' <<| box '(5,5),(3,4)' → t
|
геометрический_тип |>> геометрический_тип → boolean
Первый объект строго выше второго? Имеется для типов box, polygon, circle. box '(5,5),(3,4)' |>> box '(3,3),(0,0)' → t
|
геометрический_тип &<| геометрический_тип → boolean
Первый объект не простирается выше второго? Имеется для типов box, polygon, circle. box '(1,1),(0,0)' &<| box '(2,2),(0,0)' → t
|
геометрический_тип |&> геометрический_тип → boolean
Первый объект не простирается ниже второго? Имеется для типов box, polygon, circle. box '(3,3),(0,0)' |&> box '(2,2),(0,0)' → t
|
box <^ box → boolean
Первый объект ниже (или касается снизу) второго? box '((1,1),(0,0))' <^ box '((2,2),(1,1))' → t
|
point <^ point → boolean
Первый объект строго ниже второго? (Обозначение оператора ошибочно, корректным было бы <<|.) point '(1,0)' <^ point '(1,1)' → t
|
box >^ box → boolean
Первый объект выше (или касается сверху) второго? box '((2,2),(1,1))' >^ box '((1,1),(0,0))' → t
|
point >^ point → boolean
Первый объект строго выше второго? (Обозначение оператора ошибочно, корректным было бы |>>.) point '(1,1)' >^ point '(1,0)' → t
|
геометрический_тип ?# геометрический_тип → boolean
Объекты пересекаются? Имеется для следующих пар типов: (box, box), (lseg, box), (lseg, lseg), (lseg, line), (line, box), (line, line), (path, path). lseg '[(-1,0),(1,0)]' ?# box '(2,2),(-2,-2)' → t
|
?- line → boolean
?- lseg → boolean
Линия является горизонтальной? ?- lseg '[(-1,0),(1,0)]' → t
|
point ?- point → boolean
Точки выровнены по горизонтали (имеют одинаковую координату y)? point '(1,0)' ?- point '(0,0)' → t
|
?| line → boolean
?| lseg → boolean
Линия является вертикальной? ?| lseg '[(-1,0),(1,0)]' → f
|
point ?| point → boolean
Точки выровнены по вертикали (имеют одинаковую координату x)? point '(0,1)' ?| point '(0,0)' → t
|
line ?-| line → boolean
lseg ?-| lseg → boolean
Линии перпендикулярны? lseg '[(0,0),(0,1)]' ?-| lseg '[(0,0),(1,0)]' → t
|
line ?|| line → boolean
lseg ?|| lseg → boolean
Линии параллельны? lseg '[(-1,0),(1,0)]' ?|| lseg '[(-1,2),(1,2)]' → t
|
геометрический_тип ~= геометрический_тип → boolean
Объекты совпадают? Имеется для типов point, box, polygon, circle. polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' → t
|