# 9.11.几何函数与算子

几何类型指向,,lseg,线,路径,多边形圆圈拥有大量本机支持函数和运算符,如中所示表9.35,表9.36表9.37.

表9.35.几何算子

操作人员

描述

例子
几何_型 + 指向*几何_型*

添加第二个的坐标指向到第一个论点的每一点,从而进行翻译。适用于指向, , 路径, 圆圈.

方框'(1,1),(0,0)'+点'(2,0)'(3,1),(2,0)
路径 + 路径路径

连接两个打开的路径(如果任一路径关闭,则返回NULL)。

路径“[(0,0),(1,1)]”+路径“[(2,2),(3,3),(4,4)]”[(0,0),(1,1),(2,2),(3,3),(4,4)]
几何_型 - 指向*几何_型*

减去第二个坐标指向从第一个论点的每一点出发,进行翻译。适用于指向, , 路径, 圆圈.

方框'(1,1),(0,0)'-点'(2,0)'(-1,1),(-2,0)
几何_型 * 指向*几何_型*

将第一个参数的每个点乘以第二个参数指向(将点视为由实部和虚部表示的复数,并执行标准复数乘法)。如果一个人解释第二个指向作为向量,这相当于按向量长度缩放对象的大小和与原点的距离,并按向量与原点的角度逆时针旋转对象*十、*轴适用于指向, ,[a] 路径, 圆圈.

路径“((0,0)、(1,0)、(1,1))”*点“(3.0,0)”((0,0),(3,0),(3,3))

路径“((0,0)、(1,0)、(1,1))”*点(cosd(45),sind(45))((0,0),​(0.7071067811865475,0.7071067811865475),​(0,1.414213562373095))
几何_型 / 指向*几何_型*

将第一个论点的每一点除以第二个论点指向(将点视为由实部和虚部表示的复数,并执行标准复数除法)。如果一个人解释第二个指向作为向量,这相当于将对象的大小和与原点的距离向下缩放向量的长度,并将其围绕原点顺时针旋转向量与原点的角度*十、*轴适用于指向, ,[a] 路径, 圆圈.

路径“((0,0),(1,0),(1,1))”/点“(2.0,0)”((0,0),(0.5,0),(0.5,0.5))

路径“((0,0)、(1,0)、(1,1))”/点(cosd(45),sind(45))((0,0),​(0.7071067811865476,-0.7071067811865476),​(1.4142135623730951,0))
@-@ 几何_型双精度

计算总长度。适用于lseg, 路径.

@-@路径“[(0,0)、(1,0)、(1,1)]”2.
@@ 几何_型指向

计算中心点。适用于, lseg, 多边形, 圆圈.

@@框'(2,2),(0,0)'(1,1)
# 几何_型整数

返回点数。适用于路径, 多边形.

#路径“((1,0),(0,1),(-1,0))”3.
几何_型 # 几何_型指向

计算交点,如果没有交点,则为NULL。适用于lseg, 线.

lseg'[(0,0),(1,1)]“#lseg'[(1,0),(0,1)]”(0.5,0.5)
#

计算两个框的交点,如果没有,则为NULL。

盒子(2,2),(-1,-1)#盒子(1,1),(-2,-2)'(1,1),(-1,-1)
几何_型 ## 几何_型指向

计算第二个对象上距离第一个对象最近的点。适用于以下几对类型:(指向, ), (指向, lseg), (观点,线), (lseg,盒子), (lseg,lseg), (线,lseg)。

point '(0,0)' ## lseg '[(2,0),(0,2)]'(1,1)
几何类型 <-> *几何类型*→双精度

计算对象之间的距离。适用于所有几何类型,除了多边形, 对于所有的组合观点使用另一种几何类型,对于这些额外的类型对:(盒子,lseg), (lseg,线), (多边形,圆圈) (以及换向器案例)。

圆'<(0,0),1>' <-> 圆'<(5,0),1>'3
几何类型 @> *几何类型*→布尔值

第一个对象是否包含第二个?可用于这些类型对:(盒子,观点), (盒子,盒子), (小路,观点), (多边形,观点), (多边形,多边形), (圆圈,观点), (圆圈,圆圈)。

圆'<(0,0),2>'@>点'(1,1)'
几何类型 <@ *几何类型*→布尔值

第一个对象是包含在第二个对象中还是包含在第二个对象中?可用于这些类型对:(观点,盒子), (观点, lseg), (观点, 线), (观点, 小路), (观点, 多边形), (观点, 圆圈), (盒子, 盒子), (lseg, 盒子), (lseg,线), (多边形,多边形), (圆圈,圆圈)。

点 '(1,1)' <@ 圆圈 '<(0,0),2>'
几何类型 && *几何类型*→布尔值

这些对象是否重叠?(有一个共同点使这一点成为现实。)适用于盒子,多边形,圆圈.

框'(1,1),(0,0)' && 框'(2,2),(0,0)'
几何类型 << *几何类型*→布尔值

第一个对象严格在第二个对象的左边吗?可以用来观点,盒子,多边形,圆圈.

圆'<(0,0),1>' << 圆'<(5,0),1>'
几何类型 >> *几何类型*→布尔值

第一个对象是否严格正确于第二个对象?可以用来观点,盒子,多边形,圆圈.

圆'<(5,0),1>' >> 圆'<(0,0),1>'
几何类型 &< *几何类型*→布尔值

第一个对象不会延伸到第二个对象的右侧吗?可以用来盒子,多边形,圆圈.

框'(1,1),(0,0)' &< 框'(2,2),(0,0)'
几何类型 &> *几何类型*→布尔值

第一个对象不会延伸到第二个对象的左侧吗?可以用来盒子,多边形,圆圈.

框'(3,3),(0,0)&>框'(2,2),(0,0)'t
几何_型 <<| *几何_型*→布尔值

第一个物体严格低于第二个吗?适用于指向,,多边形,圆圈.

方框(3,3)、(0,0)<<方框(5,5)、(3,4)'t
几何_型 |>> *几何_型*→布尔值

第一个物体严格高于第二个吗?适用于指向,, 多边形, 圆圈.

盒子'(5,5),(3,4)|>>盒子'(3,3),(0,0)'t
几何_型 &<| 几何_型布尔值

第一个物体不延伸到第二个物体之上吗?适用于, 多边形, 圆圈.

盒子'(1,1),(0,0)&<|盒子'(2,2),(0,0)'t
几何_型 |&> 几何_型布尔值

第一个物体不延伸到第二个物体以下吗?适用于, 多边形, 圆圈.

框'(3,3),(0,0)|和>框'(2,2),(0,0)'t
<^ 布尔值

第一个物体是否低于第二个(允许边缘接触)?

方框“((1,1)、(0,0))”<^box“((2,2)、(1,1))”t
>^ 布尔值

第一个物体是否在第二个物体之上(允许边缘接触)?

框“((2,2)、(1,1))”>^box“((1,1)、(0,0))”t
几何_型 ?# 几何_型布尔值

这些物体相交吗?适用于以下几对类型:(, ), (lseg, ), (lseg, lseg), (lseg, 线), (线, ), (线, 线), (路径, 路径).

lseg'[(-1,0),(1,0)]?#方框'(2,2),(-2,-2)'t
?- 线布尔值

?- lseg布尔值

这条线是水平的吗?

?- lseg'[(-1,0),(1,0)]'t
指向 ?- 指向布尔值

点是否水平对齐(即y坐标相同)?

(1,0)点?-点'(0,0)'t
?| 线布尔值

?| lseg布尔值

这条线是垂直的吗?

?| lseg'[(-1,0),(1,0)]'f
指向 ?| 指向布尔值

点是否垂直对齐(即具有相同的x坐标)?

(0,1)点?|点'(0,0)'t
线 ?-| 线布尔值

lseg ?-| lseg布尔值

直线垂直吗?

lseg'[(0,0),(0,1)]'?-|lseg'[(0,0),(1,0)]'t
线 ?|| 线布尔值

lseg ?|| lseg布尔值

直线平行吗?

lseg'[(-1,0),(1,0)]?||lseg'[(-1,2),(1,2)]'t
几何_型 ~= 几何_型布尔值

这些物体是一样的吗?适用于指向, , 多边形, 圆圈.

多边形“((0,0),(1,1))”~=多边形“((1,1),(0,0))”t
[a] 使用这些操作符“旋转”长方体只会移动其角点:长方体的边仍被认为与轴平行。因此,不会像真正的旋转那样保留长方体的大小。

# 小心

请注意,“与”运算符,~=,代表了社会平等的通常观念指向, , 多边形圆圈类型。一些几何类型也有一个=接线员,但是=比较平等地区只有其他标量比较运算符(<=以此类推),在这些类型可用的情况下,同样地比较区域。

# 笔记

在PostgreSQL 14之前,这一点严格低于/高于比较运算符指向 <<| 指向指向 |>> 指向分别被称为<^>^。这些名称仍然可用,但已被弃用,最终将被删除。

表9.36.几何函数

作用

描述

例子
地区 ( 几何_型 ) → 双精度

计算面积。适用于, 路径, 圆圈A.路径输入必须关闭,否则返回NULL。此外,如果路径是自交的,结果可能毫无意义。

面积(方框(2,2)、(0,0)’)4.
居中 ( 几何_型 ) → 指向

计算中心点。适用于, 圆圈.

中心(1,2)、(0,0)框)(0.5,1)
斜线的 ( ) → lseg

将长方体的对角线提取为线段(与lseg(盒子)).

对角线(方框’(1,2),(0,0)’)[(1,2),(0,0)]
直径 ( 圆圈 ) → 双精度

计算圆的直径。

直径(圆圈“<(0,0),2>”)4.
身高 ( ) → 双精度

计算长方体的垂直大小。

高度(1,2)、(0,0)框)2.
是封闭的 ( 路径 ) → 布尔值

这条路封闭了吗?

isclosed(路径“((0,0)、(1,1)、(2,0))”)t
伊索彭 ( 路径 ) → 布尔值

这条路通吗?

等参线(路径“[(0,0),(1,1),(2,0)]”t
( 几何_型 ) → 双精度

计算总长度。适用于lseg, 路径.

长度(路径“(-1,0),(1,0))”4.
n点 ( 几何_型 ) → 整数

返回点数。适用于路径, 多边形.

n点(路径“[(0,0)、(1,1)、(2,0)]”3.
pclose ( 路径 ) → 路径

将路径转换为封闭形式。

pclose(路径“[(0,0)、(1,1)、(2,0)]”((0,0),(1,1),(2,0))
波本 ( 路径 ) → 路径

将路径转换为开放形式。

popen(路径“((0,0)、(1,1)、(2,0))”)[(0,0),(1,1),(2,0)]
半径 ( 圆圈 ) → 双精度

计算圆的半径。

半径(圆“<(0,0),2>”)2.
斜坡 ( 指向, 指向 ) → 双精度

计算通过两点绘制的直线的坡度。

坡度(点“(0,0)”,点“(2,1)”)0.5
宽度 ( ) → 双精度

计算长方体的水平大小。

宽度(框’(1,2),(0,0)’)1.

表9.37.几何类型转换函数

作用

描述

例子
( 圆圈 ) →

计算圆内的内接框。

框(圈“<(0,0),2>”)(1.414213562373095,1.414213562373095),​(-1.414213562373095,-1.414213562373095)
( 指向 ) →

将点转换为空框。

方框(1,0点)(1,0),(1,0)
( 指向, 指向 ) →

将任意两个角点转换为长方体。

方框(点“(0,1)”,点“(1,0)”)(1,1),(0,0)
( 多边形 ) →

计算多边形的边界框。

长方体(多边形'((0,0),(1,1),(2,0)))(2,1),(0,0)
装订盒 ( , ) →

计算两个框的边界框。

装订盒(盒’(1,1),(0,0)’,盒’(4,4),(3,3)’)(4,4),(0,0)
圆圈 ( ) → 圆圈

计算包围盒的最小圆。

圆圈(方框’(1,1)、(0,0)’)<(0.5,0.5),0.7071067811865476>
圆圈 ( 指向, 双精度 ) → 圆圈

从圆心和半径构建圆。

圆(点“(0,0)”,2.0)<(0,0),2>
圆圈 ( 多边形 ) → 圆圈

将多边形转换为圆。圆心是多边形点位置的平均值,半径是多边形点与圆心的平均距离。

圆(多边形“((0,0)、(1,3)、(2,0))”)<(1,1),1.6094757082487299>
线 ( 指向, 指向 ) → 线

将两点转换为穿过它们的直线。

直线(点'-1,0',点'-1,0'){0,-1,0}
lseg ( ) → lseg

将长方体的对角线提取为线段。

lseg(框(1,0),(-1,0)[(1,0),(-1,0)]
lseg ( 指向, 指向 ) → lseg

从两个端点构造线段。

lseg(点'-1,0',点'-1,0')[(-1,0),(1,0)]
路径 ( 多边形 ) → 路径

将多边形转换为具有相同点列表的闭合路径。

路径(多边形“((0,0)、(1,1)、(2,0))”)((0,0),(1,1),(2,0))
指向 ( 双精度, 双精度 ) → 指向

从其坐标构造点。

第(23.4,-44.5)点(23.4,-44.5)
指向 ( ) → 指向

计算框的中心。

点(框'(1,0),(-1,0)')(0,0)
观点 ( 圆圈 ) → 观点

计算圆心。

点(圆圈'<(0,0),2>')(0,0)
观点 ( lseg ) → 观点

计算线段的中心。

点(lseg'[(-1,0),(1,0)]')(0,0)
观点 ( 多边形 ) → 观点

计算多边形的中心(多边形点位置的平均值)。

点(多边形'((0,0),(1,1),(2,0))')(1,0.3333333333333333)
多边形() →多边形

将长方体转换为4点多边形。

多边形(框'(1,1),(0,0)')((0,0),(0,1),(1,1),(1,0))
多边形(圆圈) →多边形

将圆转换为12点多边形。

多边形(圆“<(0,0),2>”)((-2,0),​(-1.7320508075688774,0.9999999999999999),​(-1.0000000000000002,1.7320508075688772),​(-1.2246063538223773e-16,2),​(0.9999999999999996,1.7320508075688774),​(1.732050807568877,1.0000000000000007),​(2,2.4492127076447545e-16),​(1.7320508075688776,-0.9999999999999994),​(1.0000000000000009,-1.7320508075688767),​(3.673819061467132e-16,-2),​(-0.9999999999999987,-1.732050807568878),​(-1.7320508075688767,-1.0000000000000009))
多边形(整数,圆圈) →多边形

将圆转换为*n*-点多边形。

多边形(4,圆“<(3,0),1>”)((2,0),​(3,1),​(4,1.2246063538223773e-16),​(3,-1))
多边形 ( 路径 ) → 多边形

将闭合路径转换为具有相同点列表的多边形。

多边形(路径“((0,0)、(1,1)、(2,0))”)((0,0),(1,1),(2,0))

可以访问a的两个部件号指向就像点是一个索引为0和1的数组。例如,如果t、 p是一个指向那么专栏呢从t中选择p[0]检索X坐标并更新t集p[1]=。。。更改Y坐标。同样,类型为lseg可以被视为两个数组指向价值观