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
|