| geometric_type+point→geometric_type
  Adds the coordinates of the second pointto those of each point of the first argument, thus performing translation. Available forpoint,box,path,circle. box '(1,1),(0,0)' + point '(2,0)'→(3,1),(2,0)
 | 
| path+path→path
  Concatenates two open paths (returns NULL if either path is closed).  path '[(0,0),(1,1)]' + path '[(2,2),(3,3),(4,4)]'→[(0,0),(1,1),(2,2),(3,3),(4,4)]
 | 
| geometric_type-point→geometric_type
  Subtracts the coordinates of the second pointfrom those of each point of the first argument, thus performing translation. Available forpoint,box,path,circle. box '(1,1),(0,0)' - point '(2,0)'→(-1,1),(-2,0)
 | 
| geometric_type*point→geometric_type
  Multiplies each point of the first argument by the second point(treating a point as being a complex number represented by real and imaginary parts, and performing standard complex multiplication). If one interprets the secondpointas a vector, this is equivalent to scaling the object's size and distance from the origin by the length of the vector, and rotating it counterclockwise around the origin by the vector's angle from thexaxis. Available forpoint,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))
 | 
| geometric_type/point→geometric_type
  Divides each point of the first argument by the second point(treating a point as being a complex number represented by real and imaginary parts, and performing standard complex division). If one interprets the secondpointas a vector, this is equivalent to scaling the object's size and distance from the origin down by the length of the vector, and rotating it clockwise around the origin by the vector's angle from thexaxis. Available forpoint,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))
 | 
| @-@geometric_type→double precision
  Computes the total length. Available for lseg,path. @-@ path '[(0,0),(1,0),(1,1)]'→2
 | 
| @@geometric_type→point
  Computes the center point. Available for box,lseg,polygon,circle. @@ box '(2,2),(0,0)'→(1,1)
 | 
| #geometric_type→integer
  Returns the number of points. Available for path,polygon. # path '((1,0),(0,1),(-1,0))'→3
 | 
| geometric_type#geometric_type→point
  Computes the point of intersection, or NULL if there is none. Available for lseg,line. lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]'→(0.5,0.5)
 | 
| box#box→box
  Computes the intersection of two boxes, or NULL if there is none.  box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)'→(1,1),(-1,-1)
 | 
| geometric_type##geometric_type→point
  Computes the closest point to the first object on the second object. Available for these pairs of types: (point,box), (point,lseg), (point,line), (lseg,box), (lseg,lseg), (line,lseg). point '(0,0)' ## lseg '[(2,0),(0,2)]'→(1,1)
 | 
| geometric_type<->geometric_type→double precision
  Computes the distance between the objects. Available for all geometric types except polygon, for all combinations ofpointwith another geometric type, and for these additional pairs of types: (box,lseg), (lseg,line), (polygon,circle) (and the commutator cases). circle '<(0,0),1>' <-> circle '<(5,0),1>'→3
 | 
| geometric_type@>geometric_type→boolean
  Does first object contain second? Available for these pairs of types: (box,point), (box,box), (path,point), (polygon,point), (polygon,polygon), (circle,point), (circle,circle). circle '<(0,0),2>' @> point '(1,1)'→t
 | 
| geometric_type<@geometric_type→boolean
  Is first object contained in or on second? Available for these pairs of types: (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
 | 
| geometric_type&&geometric_type→boolean
  Do these objects overlap? (One point in common makes this true.) Available for box,polygon,circle. box '(1,1),(0,0)' && box '(2,2),(0,0)'→t
 | 
| geometric_type<<geometric_type→boolean
  Is first object strictly left of second? Available for point,box,polygon,circle. circle '<(0,0),1>' << circle '<(5,0),1>'→t
 | 
| geometric_type>>geometric_type→boolean
  Is first object strictly right of second? Available for point,box,polygon,circle. circle '<(5,0),1>' >> circle '<(0,0),1>'→t
 | 
| geometric_type&<geometric_type→boolean
  Does first object not extend to the right of second? Available for box,polygon,circle. box '(1,1),(0,0)' &< box '(2,2),(0,0)'→t
 | 
| geometric_type&>geometric_type→boolean
  Does first object not extend to the left of second? Available for box,polygon,circle. box '(3,3),(0,0)' &> box '(2,2),(0,0)'→t
 | 
| geometric_type<<|geometric_type→boolean
  Is first object strictly below second? Available for box,polygon,circle. box '(3,3),(0,0)' <<| box '(5,5),(3,4)'→t
 | 
| geometric_type|>>geometric_type→boolean
  Is first object strictly above second? Available for box,polygon,circle. box '(5,5),(3,4)' |>> box '(3,3),(0,0)'→t
 | 
| geometric_type&<|geometric_type→boolean
  Does first object not extend above second? Available for box,polygon,circle. box '(1,1),(0,0)' &<| box '(2,2),(0,0)'→t
 | 
| geometric_type|&>geometric_type→boolean
  Does first object not extend below second? Available for box,polygon,circle. box '(3,3),(0,0)' |&> box '(2,2),(0,0)'→t
 | 
| box<^box→boolean
  Is first object below second (allows edges to touch)?  box '((1,1),(0,0))' <^ box '((2,2),(1,1))'→t
 | 
| point<^point→boolean
  Is first object strictly below second? (This operator is misnamed; it should be <<|.) point '(1,0)' <^ point '(1,1)'→t
 | 
| box>^box→boolean
  Is first object above second (allows edges to touch)?  box '((2,2),(1,1))' >^ box '((1,1),(0,0))'→t
 | 
| point>^point→boolean
  Is first object strictly above second? (This operator is misnamed; it should be |>>.) point '(1,1)' >^ point '(1,0)'→t
 | 
| geometric_type?#geometric_type→boolean
  Do these objects intersect? Available for these pairs of types: (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
  Is line horizontal?  ?- lseg '[(-1,0),(1,0)]'→t
 | 
| point?-point→boolean
  Are points horizontally aligned (that is, have same y coordinate)?  point '(1,0)' ?- point '(0,0)'→t
 | 
| ?|line→boolean
 ?|lseg→boolean
  Is line vertical?  ?| lseg '[(-1,0),(1,0)]'→f
 | 
| point?|point→boolean
  Are points vertically aligned (that is, have same x coordinate)?  point '(0,1)' ?| point '(0,0)'→t
 | 
| line?-|line→boolean
 lseg?-|lseg→boolean
  Are lines perpendicular?  lseg '[(0,0),(0,1)]' ?-| lseg '[(0,0),(1,0)]'→t
 | 
| line?||line→boolean
 lseg?||lseg→boolean
  Are lines parallel?  lseg '[(-1,0),(1,0)]' ?|| lseg '[(-1,2),(1,2)]'→t
 | 
| geometric_type~=geometric_type→boolean
  Are these objects the same? Available for point,box,polygon,circle. polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'→t
 |