几何函数和操作符

最近更新时间:2022-07-04 10:26:13

我的收藏
数据库支持的几何类型有 point、box、lseg、line、path、polygon、circle,因此数据库也提供了一系列的几何函数,具体见下列表格。

几何操作符

操作符
功能描述
示例
结果
+
转换平移
box '((0,0),(1,1))' + point '(2.0,0)'
(3,1),(2,0)
-
转换平移
box '((0,0),(1,1))' - point '(2.0,0)'
(-1,1),(-2,0)
*
伸展/旋转
box '((0,0),(1,1))' * point '(2.0,0)'
(2,2),(0,0)
/
伸展/旋转
box '((0,0),(2,2))' / point '(2.0,0)'
(1,1),(0,0)
#
两个图形交接面
box '((1,-1),(-1,1))' # box '((1,1),(-1,-1))'
(1,1),(-1,-1)
@-@
图形的长度或者周长
@-@ path '((0,0),(1,0))'
2
@@
中心
@@ circle '((0,0),10)'
(0,0)
##
第一个图形与第二个图形最近的点
point '(0,0)' ## lseg '((2,0),(0,2))'
(1,1)
<->
图形之间的距离
circle '((0,0),2)' <-> circle '((4,0),1)'
1
&&
两个图形是否相交
box '((0,0),(1,2))' && box '((0,0),(2,3))'
t
<<
图形1是否严格在图形2的左边
circle '((0,0),1)' << circle '((5,0),1)'
t
>>
图形1是否严格在图形2的右边
circle '((5,0),1)' >> circle '((0,0),1)'
t
&<
图形1的最右边是否不超过图形2的最右边
box '((0,0),(1,1))' &< box '((0,0),(2,2))'
t
&>
图形1的最右边是否不超过图形2的最左边
box '((0,0),(3,3))' &> box '((0,0),(2,2))'
t
<<|
图形1是否严格在图形2下边
box '((0,0),(2,2))' <<| box '((4,5),(6,6))'
t
|>>
图形1是否严格在图形2上边
box '((5,6),(7,7))' |>> box '((0,0),(4,4))'
t
<^
图形1是否低于图形2(允许接触)
box '((5,6),(7,7))' <^ box '((0,0),(4,4))'
f
>^
图形1是否高于图形2(允许接触)
box '((5,6),(7,7))' >^ box '((0,0),(4,4))'
t
?#
相交
lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'
t
?-
是否水平
?- lseg '((-1,0),(1,0))'
t
?-
两个图形水平对齐
point '(1,0)' ?- point '(0,0)'
t
?|
是否垂直
?| lseg '((-1,0),(1,0))'
f
?|
两个图形是否垂直对齐
point '(1,2)' ?| point '(1,1)'
t
?-|
两条线是否垂直
lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'
t
?||
两条线是否平行
lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'
t
@>
图形1是否包含图形2
circle '((0,0),2)' @> circle '((0,0),1)''
t
<@
图形1是否被图形2包含
point '(1,1)' <@ circle '((0,0),2)'
t
~=
是否相同
polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'
t

几何函数

函数
返回值类型
描述
示例
结果
area(object)
double precision
面积
area(box '((0,0),(1,2))')
2
center(object)
point
中心点
center(box '((0,0),(1,2))')
(0.5,1)
diameter(circle)
double precision
圆的直径
diameter(circle '((0,0),2.0)')
4
height(box)
double precision
height(box '((0,0),(2,3))')
3
isclosed(path)
boolean
图形是否闭合
isclosed(path '((0,0),(1,1),(2,0))')
t
isopen(path)
boolean
图形是否开放
isopen(path '[(0,0),(1,1),(2,0)]')
t
length(object)
double precision
图形的长度
length(path '((-1,0),(1,0))')
2
npoints(path)
int
图形的顶点数
npoints(path '[(0,0),(1,1),(2,0)]')
3
npoints(polygon)
int
图形的顶点数
npoints(polygon '((1,1),(0,0))')
2
radius(circle)
double precision
圆的半径
radius(circle '((0,0),2.0)')
2
width(box)
double precision
水平长度
width(box '((0,0),(3,2))')
3

几何类型转换函数

函数
返回值类型
描述
示例
返回值
box(circle)
box
圆转为矩形
box(circle '((0,0),3.0)')
(2.12132034355964,2.12132034355964),(-2.12132034355964,-2.12132034355964) (1 row)
box(point, point)
box
点转为矩形
box(point '(0,0)', point '(2,2)')
(2,2),(0,0)
box(polygon)
box
多边形转为矩形
box(polygon '((0,0),(1,1),(2,0))')
(2,1),(0,0)
circle(box)
circle
矩形转为圆
circle(box '((0,0),(2,2))')
<(1,1),1.4142135623731>
circle(point, double precision)
circle
中心和半径转为圆
circle(point '(0,0)', 3.0)
<(0,0),3>
circle(polygon)
circle
多边形转为圆
circle(polygon '((0,0),(1,1),(2,0))')
<(1,0.333333333333333),0.924950591148529>
lseg(box)
lseg
矩形转为线段
lseg(box'((-1,0),(1,0))')
[(1,0),(-1,0)]
lseg(point, point)
lseg
多点转为线段
lseg(point '(-1,0)', point '(1,0)')
[(-1,0),(1,0)]
path(polygon)
path
polygon to path
path(polygon '((0,0),(1,1),(2,0))')
((0,0),(1,1),(2,0))
point(double precision, double precision)
point
construct point
point(23.4, -44.5)
(23.4,-44.5)
point(box)
point
图形中心
point(box '((-1,0),(1,0))')
(0,0)
point(circle)
point
圆的中心
point(circle '((0,0),2.0)')
(0,0)
point(lseg)
point
线段的中心
point(lseg '((-2,0),(2,0))')
(0,0)
point(polygon)
point
多边形的中心
point(polygon '((0,0),(1,1),(2,0))')
(1,0.333333333333333)
polygon(box)
polygon
矩形转为四个点的多边形
polygon(box '((0,0),(1,1))')
((0,0),(0,1),(1,1),(1,0))
polygon(circle)
polygon
圆形转为12个点的多边形
polygon(circle '((0,0),2.0)')
-
polygon(npts, circle)
polygon
圆形转为 n 个点的多边形
polygon(12, circle '((0,0),2.0)')
((-2,0),(-0.618033988749895,1.90211303259031),(1.61803398874989,1.17557050458495),(1.6180339887499,-1.17557050458495),(-0.618033988749894,-1.90211303259031))
polygon(path)
polygon
路径转为多边形
polygon(path '((0,0),(1,1),(2,0))')
((0,0),(1,1),(2,0))