geometric_type + point
        → geometric_type
        
       
最初の引数の各々の点に二番目のpointの座標を加え、平行移動します。
point、box、path、circleで利用可能です。
        
       
        box '(1,1),(0,0)' + point '(2,0)'
        → (3,1),(2,0)
         | 
        path + path
        → path
        
       
2つの開経路を結合します。(どちらかの経路が閉じていればNULLを返します。)
        
       
        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
        
       
最初の引数の各々の点に二番目のpointの座標を減算し、平行移動します。
point、box、path、circleで利用可能です。
        
       
        box '(1,1),(0,0)' - point '(2,0)'
        → (-1,1),(-2,0)
         | 
        geometric_type * point
        → geometric_type
        
       
最初の引数の各々の点に2番目のpointの座標を乗じます。(点を実数部と虚数部で表現する複素数として扱い、標準複素乗法を行います。)
2番目の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))
         | 
        geometric_type / point
        → geometric_type
        
       
最初の引数の各々の点を2番目のpointの座標で除算します。(点を実数部と虚数部で表現する複素数として扱い、標準複素除法を行います。
2番目の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))
         | 
        @-@ geometric_type
        → double precision
        
       
全長を計算します。lseg、pathで利用可能です。
        
       
        @-@ path '[(0,0),(1,0),(1,1)]'
        → 2
         | 
        @@ geometric_type
        → point
        
       
中心点を計算します。
box、lseg、polygon、circleで利用可能です。
        
       
        @@ box '(2,2),(0,0)'
        → (1,1)
         | 
        # geometric_type
        → integer
        
       
点の数を返します。
path、polygonで利用可能です。
        
       
        # path '((1,0),(0,1),(-1,0))'
        → 3
         | 
        geometric_type # geometric_type
        → point
        
       
交点を計算します。交点がなければNULLを返します。
lseg、lineで利用可能です。
        
       
        lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]'
        → (0.5,0.5)
         | 
        box # box
        → box
        
       
2つの矩形の共通部を計算します。
共通部がなければNULLを返します。
        
       
        box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)'
        → (1,1),(-1,-1)
         | 
        geometric_type ## geometric_type
        → point
        
       
最初のオブジェクトから2番目のオブジェクトへの2番目のオブジェクト上の最近点を計算します。
以下の型の対で利用可能です。
        (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
        
       
オブジェクト間の距離を計算します。
7つのすべての幾何型、pointと他のすべての幾何型との組み合わせ、そして次の型の組み合わせで利用できます。
(box、lseg)、(lseg、line)、(polygon、circle)(そして可換の組み合わせ)。
        
       
        circle '<(0,0),1>' <-> circle '<(5,0),1>'
        → 3
         | 
        geometric_type @> geometric_type
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトを含んでいるか?
次の型の組み合わせで利用できます。
        (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
        
       
最初のオブジェクトは2番目のオブジェクトに含まれているかあるいはその上にあるか?
次の型の組み合わせで利用できます。
        (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
        
       
これらのオブジェクトは重なり合っているか?
(共通の点があれば真となります。)
box、polygon、circleで利用可能です。
        
       
        box '(1,1),(0,0)' && box '(2,2),(0,0)'
        → t
         | 
        geometric_type << geometric_type
        → boolean
        
       
最初のオブジェクトは完全に2番目のオブジェクトの左にあるか?
point、box、polygon、circleで利用可能です。
        
       
        circle '<(0,0),1>' << circle '<(5,0),1>'
        → t
         | 
        geometric_type >> geometric_type
        → boolean
        
       
最初のオブジェクトは完全に2番目のオブジェクトの右にあるか?
point、box、polygon、circleで利用可能です。
        
       
        circle '<(5,0),1>' >> circle '<(0,0),1>'
        → t
         | 
        geometric_type &< geometric_type
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの右にはみ出していないか?
box、polygon、circleで利用可能です。
        
       
        box '(1,1),(0,0)' &< box '(2,2),(0,0)'
        → t
         | 
        geometric_type &> geometric_type
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの左にはみ出していないか?
box、polygon、circleで利用可能です。
        
       
        box '(3,3),(0,0)' &> box '(2,2),(0,0)'
        → t
         | 
        geometric_type <<| geometric_type
        → boolean
        
       
最初のオブジェクトは完全に2番目のオブジェクトの下にあるか?
point、box、polygon、circleで利用可能です。
        
       
        box '(3,3),(0,0)' <<| box '(5,5),(3,4)'
        → t
         | 
        geometric_type |>> geometric_type
        → boolean
        
       
最初のオブジェクトは完全に2番目のオブジェクトの上にあるか?
point、box、polygon、circleで利用可能です。
        
       
        box '(5,5),(3,4)' |>> box '(3,3),(0,0)'
        → t
         | 
        geometric_type &<| geometric_type
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの上にはみ出していないか?
box、polygon、circleで利用可能です。
        
       
        box '(1,1),(0,0)' &<| box '(2,2),(0,0)'
        → t
         | 
        geometric_type |&> geometric_type
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの下にはみ出していないか?
box、polygon、circleで利用可能です。
        
       
        box '(3,3),(0,0)' |&> box '(2,2),(0,0)'
        → t
         | 
        box <^ box
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの下か?
(辺が接しているのを許容します)
        
       
        box '((1,1),(0,0))' <^ box '((2,2),(1,1))'
        → t
         | 
        box >^ box
        → boolean
        
       
最初のオブジェクトは2番目のオブジェクトの上か?
(辺が接しているのを許容します)
        
       
        box '((2,2),(1,1))' >^ box '((1,1),(0,0))'
        → t
         | 
        geometric_type ?# geometric_type
        → 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
        
       
(指定された)2つの線は垂直か?
        
       
        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
         | 
        geometric_type ~= geometric_type
        → boolean
        
       
オブジェクトは同じか?
point、box、polygon、circleで利用可能です。
        
       
        polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'
        → t
         |