<entry>Representation</entry>
</row>
</thead>
<tbody>
<row>
<entry><type>point</type></entry>
<entry>16 bytes</entry>
<entry>Point on a plane</entry>
<entry>(x,y)</entry>
</row>
<row>
<entry><type>line</type></entry>
<entry>24 bytes</entry>
<entry>Infinite line</entry>
<entry>{A,B,C}</entry>
</row>
<row>
<entry><type>lseg</type></entry>
<entry>32 bytes</entry>
<entry>Finite line segment</entry>
<entry>[(x1,y1),(x2,y2)]</entry>
</row>
<row>
<entry><type>box</type></entry>
<entry>32 bytes</entry>
<entry>Rectangular box</entry>
<entry>(x1,y1),(x2,y2)</entry>
</row>
<row>
<entry><type>path</type></entry>
<entry>16+16n bytes</entry>
<entry>Closed path (similar to polygon)</entry>
<entry>((x1,y1),...)</entry>
</row>
<row>
<entry><type>path</type></entry>
<entry>16+16n bytes</entry>
<entry>Open path</entry>
<entry>[(x1,y1),...]</entry>
</row>
<row>
<entry><type>polygon</type></entry>
<entry>40+16n bytes</entry>
<entry>Polygon (similar to closed path)</entry>
<entry>((x1,y1),...)</entry>
</row>
<row>
<entry><type>circle</type></entry>
<entry>24 bytes</entry>
<entry>Circle</entry>
<entry><(x,y),r> (center point and radius)</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
In all these types, the individual coordinates are stored as
<type>double precision</type> (<type>float8</type>) numbers.
</para>
<para>
A rich set of functions and operators is available to perform various geometric
operations such as scaling, translation, rotation, and determining
intersections. They are explained in <xref linkend="functions-geometry"/>.
</para>
<sect2 id="datatype-geometric-points">
<title>Points</title>
<indexterm>
<primary>point</primary>
</indexterm>
<para>
Points are the fundamental two-dimensional building block for geometric
types. Values of type <type>point</type> are specified using either of
the following syntaxes:
<synopsis>
( <replaceable>x</replaceable> , <replaceable>y</replaceable> )
<replaceable>x</replaceable> , <replaceable>y</replaceable>
</synopsis>
where <replaceable>x</replaceable> and <replaceable>y</replaceable> are the respective
coordinates, as floating-point numbers.
</para>
<para>
Points are output using the first syntax.
</para>
</sect2>
<sect2 id="datatype-line">
<title>Lines</title>
<indexterm>
<primary>line</primary>
</indexterm>
<para>
Lines are represented by the linear
equation <replaceable>A</replaceable>x + <replaceable>B</replaceable>y + <replaceable>C</replaceable> = 0,
where <replaceable>A</replaceable> and <replaceable>B</replaceable> are not both zero. Values
of type <type>line</type> are input and output in the following form:
<synopsis>
{ <replaceable>A</replaceable>, <replaceable>B</replaceable>, <replaceable>C</replaceable> }
</synopsis>
Alternatively, any of the following forms can be used for input:
<synopsis>
[ ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> ) ]
( ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> ) )
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> )
<replaceable>x1</replaceable> , <replaceable>y1</replaceable> , <replaceable>x2</replaceable> , <replaceable>y2</replaceable>
</synopsis>
where
<literal>(<replaceable>x1</replaceable>,<replaceable>y1</replaceable>)</literal>