Set WeberTrivia.com to be my default homepage.   Suggest a Question                                               

Suggest A Question : :  Frequently Asked Questions : :  Search : :  Relevant Manuals : : 
PHP Questions : :  Linux Questions : :  MySQL Questions : : 
home  [ Login ] 

9.9. Geometric Functions and Operators

The geometric types point, box, lseg, line, path, polygon, and circle have a large set of native support functions and operators, shown in Table 9-28, Table 9-29, and Table 9-30.

Table 9-28. Geometric Operators

OperatorDescriptionExample
+ Translationbox '((0,0),(1,1))' + point '(2.0,0)'
- Translationbox '((0,0),(1,1))' - point '(2.0,0)'
* Scaling/rotationbox '((0,0),(1,1))' * point '(2.0,0)'
/ Scaling/rotationbox '((0,0),(2,2))' / point '(2.0,0)'
# Point or box of intersection'((1,-1),(-1,1))' # '((1,1),(-1,-1))'
# Number of points in path or polygon# '((1,0),(0,1),(-1,0))'
@-@ Length or circumference@-@ path '((0,0),(1,0))'
@@ Center@@ circle '((0,0),10)'
## Closest point to first operand on second operandpoint '(0,0)' ## lseg '((2,0),(0,2))'
<-> Distance betweencircle '((0,0),1)' <-> circle '((5,0),1)'
&& Overlaps?box '((0,0),(1,1))' && box '((0,0),(2,2))'
&< Overlaps or is left of?box '((0,0),(1,1))' &< box '((0,0),(2,2))'
&> Overlaps or is right of?box '((0,0),(3,3))' &> box '((0,0),(2,2))'
<< Is left of?circle '((0,0),1)' << circle '((5,0),1)'
>> Is right of?circle '((5,0),1)' >> circle '((0,0),1)'
<^ Is below?circle '((0,0),1)' <^ circle '((0,5),1)'
>^ Is above?circle '((0,5),1)' >^ circle '((0,0),1)'
?# Intersects?lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'
?- Is horizontal??- lseg '((-1,0),(1,0))'
?- Are horizontally aligned?point '(1,0)' ?- point '(0,0)'
?| Is vertical??| lseg '((-1,0),(1,0))'
?| Are vertically aligned?point '(0,1)' ?| point '(0,0)'
?-| Is perpendicular?lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'
?|| Are parallel?lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'
~ Contains?circle '((0,0),2)' ~ point '(1,1)'
@ Contained in or on?point '(1,1)' @ circle '((0,0),2)'
~= Same as?polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'

Table 9-29. Geometric Functions

FunctionReturn TypeDescriptionExample
area(object)double precisionareaarea(box '((0,0),(1,1))')
box_intersect(box, box)boxintersection boxbox_intersect(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')
center(object)pointcentercenter(box '((0,0),(1,2))')
diameter(circle)double precisiondiameter of circlediameter(circle '((0,0),2.0)')
height(box)double precisionvertical size of boxheight(box '((0,0),(1,1))')
isclosed(path)booleana closed path?isclosed(path '((0,0),(1,1),(2,0))')
isopen(path)booleanan open path?isopen(path '[(0,0),(1,1),(2,0)]')
length(object)double precisionlengthlength(path '((-1,0),(1,0))')
npoints(path)integernumber of pointsnpoints(path '[(0,0),(1,1),(2,0)]')
npoints(polygon)integernumber of pointsnpoints(polygon '((1,1),(0,0))')
pclose(path)pathconvert path to closedpopen(path '[(0,0),(1,1),(2,0)]')
popen(path)pathconvert path to openpopen(path '((0,0),(1,1),(2,0))')
radius(circle)double precisionradius of circleradius(circle '((0,0),2.0)')
width(box)double precisionhorizontal size of boxwidth(box '((0,0),(1,1))')

Table 9-30. Geometric Type Conversion Functions

FunctionReturn TypeDescriptionExample
box(circle)boxcircle to boxbox(circle '((0,0),2.0)')
box(point, point)boxpoints to boxbox(point '(0,0)', point '(1,1)')
box(polygon)boxpolygon to boxbox(polygon '((0,0),(1,1),(2,0))')
circle(box)circlebox to circlecircle(box '((0,0),(1,1))')
circle(point, double precision)circlepoint and radius to circlecircle(point '(0,0)', 2.0)
lseg(box)lsegbox diagonal to line segmentlseg(box '((-1,0),(1,0))')
lseg(point, point)lsegpoints to line segmentlseg(point '(-1,0)', point '(1,0)')
path(polygon)pointpolygon to pathpath(polygon '((0,0),(1,1),(2,0))')
point(circle)pointcenter of circlepoint(circle '((0,0),2.0)')
point(lseg, lseg)pointintersectionpoint(lseg '((-1,0),(1,0))', lseg '((-2,-2),(2,2))')
point(polygon)pointcenter of polygonpoint(polygon '((0,0),(1,1),(2,0))')
polygon(box)polygonbox to 4-point polygonpolygon(box '((0,0),(1,1))')
polygon(circle)polygoncircle to 12-point polygonpolygon(circle '((0,0),2.0)')
polygon(npts, circle)polygoncircle to npts-point polygonpolygon(12, circle '((0,0),2.0)')
polygon(path)polygonpath to polygonpolygon(path '((0,0),(1,1),(2,0))')

It is possible to access the two component numbers of a point as though it were an array with indices 0 and 1. For example, if t.p is a point column then SELECT p[0] FROM t retrieves the X coordinate and UPDATE t SET p[1] = ... changes the Y coordinate. In the same way, a value of type box or lseg may be treated as an array of two point values.

Who's Online
Guest Users: 6
Google
Web
WeberTrivia
WeberDev
WeberForums
 Free Sample Chapters  Free Sample Chapters
  Deliver First Class Web Sites: 101 Essential Checklists
Want to learn how to make your web sites usable and accessible? Want to ensure that your sites meet current best practice, without spending hours trawling through incomprehensible specifications and recommendations from dozens of different books, research papers, and web sites? Want to make sure that the sites you build are "right the first time," requiring no costly redevelopments?

More Sample Chapters

PHP General