геометрический_тип + 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
|