aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-04-22 21:32:38 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-04-22 21:32:46 -0400
commit1cc34640cabcb32b4f062673cce1d6b1819d492d (patch)
tree84b5a660f370c92dca5a00234b1b5885af977ed6
parent48107e396f75ea65192153707a8c476f66b59061 (diff)
downloadpostgresql-1cc34640cabcb32b4f062673cce1d6b1819d492d.tar.gz
postgresql-1cc34640cabcb32b4f062673cce1d6b1819d492d.zip
Doc: improve description of geometric multiplication/division.
David Johnston reminded me that the per-point calculations being done by these operators are equivalent to complex multiplication/division. (Once I would've recognized that immediately, but it's been too long since I did any of that sort of math.) Also put in a footnote mentioning that "rotation" of a box doesn't do what you might expect, as I'd griped about in the referenced thread. Discussion: https://postgr.es/m/158110996889.1089.4224139874633222837@wrigleys.postgresql.org
-rw-r--r--doc/src/sgml/func.sgml46
1 files changed, 17 insertions, 29 deletions
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 90a2582dfd1..63b870de048 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -9506,21 +9506,19 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
<returnvalue><replaceable>geometric_type</replaceable></returnvalue>
<?br?>
Multiplies each point of the first argument by the second
- <type>point</type><footnote><para>For this purpose, the
- product of two points
- (<replaceable>x1</replaceable>,<replaceable>y1</replaceable>) and
- (<replaceable>x2</replaceable>,<replaceable>y2</replaceable>) is
- defined as
- (<replaceable>x1</replaceable>*<replaceable>x2</replaceable> -
- <replaceable>y1</replaceable>*<replaceable>y2</replaceable>,
- <replaceable>x1</replaceable>*<replaceable>y2</replaceable> +
- <replaceable>y1</replaceable>*<replaceable>x2</replaceable>).</para></footnote>.
- Interpreting the <type>point</type> as a vector, this is equivalent to
+ <type>point</type> (treating a point as being a complex number
+ represented by real and imaginary parts, and performing standard
+ complex multiplication). If one interprets
+ the second <type>point</type> as a vector, this is equivalent to
scaling the object's size and distance from the origin by the length
of the vector, and rotating it counterclockwise around the origin by
the vector's angle from the <replaceable>x</replaceable> axis.
- Available for <type>point</type>, <type>box</type>, <type>path</type>,
- <type>circle</type>.
+ Available for <type>point</type>, <type>box</type>,<footnote
+ id="functions-geometry-rotation-fn"><para><quote>Rotating</quote> a
+ box with these operators only moves its corner points: the box is
+ still considered to have sides parallel to the axes. Hence the box's
+ size is not preserved, as a true rotation would do.</para></footnote>
+ <type>path</type>, <type>circle</type>.
<?br?>
<literal>path '((0,0),(1,0),(1,1))' * point '(3.0,0)'</literal>
<returnvalue>((0,0),(3,0),(3,3))</returnvalue>
@@ -9535,26 +9533,16 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
<replaceable>geometric_type</replaceable> <literal>/</literal> <type>point</type>
<returnvalue><replaceable>geometric_type</replaceable></returnvalue>
<?br?>
- Divides each point of the first argument by the
- second <type>point</type><footnote><para>For this purpose, the
- quotient of two points
- (<replaceable>x1</replaceable>,<replaceable>y1</replaceable>) and
- (<replaceable>x2</replaceable>,<replaceable>y2</replaceable>) is
- defined as
- ((<replaceable>x1</replaceable>*<replaceable>x2</replaceable> +
- <replaceable>y1</replaceable>*<replaceable>y2</replaceable>) /
- <replaceable>L</replaceable>,
- (<replaceable>y1</replaceable>*<replaceable>x2</replaceable> -
- <replaceable>x1</replaceable>*<replaceable>y2</replaceable>) /
- <replaceable>L</replaceable>),
- where <replaceable>L</replaceable> =
- <replaceable>x2</replaceable>*<replaceable>x2</replaceable> +
- <replaceable>y2</replaceable>*<replaceable>y2</replaceable>.</para></footnote>.
- Interpreting the <type>point</type> as a vector, this is equivalent to
+ Divides each point of the first argument by the second
+ <type>point</type> (treating a point as being a complex number
+ represented by real and imaginary parts, and performing standard
+ complex division). If one interprets
+ the second <type>point</type> as a vector, this is equivalent to
scaling the object's size and distance from the origin down by the
length of the vector, and rotating it clockwise around the origin by
the vector's angle from the <replaceable>x</replaceable> axis.
- Available for <type>point</type>, <type>box</type>, <type>path</type>,
+ Available for <type>point</type>, <type>box</type>,<footnoteref
+ linkend="functions-geometry-rotation-fn"/> <type>path</type>,
<type>circle</type>.
<?br?>
<literal>path '((0,0),(1,0),(1,1))' / point '(2.0,0)'</literal>