summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex')
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex105
1 files changed, 105 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
new file mode 100644
index 0000000000..580ef0d93f
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
@@ -0,0 +1,105 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+
+\section{Shape: Superellipse}
+\begin{pgflibrary}{ext.shapes.superellipse}
+ Shape in the form of a ``superellipse''.
+ \inspiration{ShapeSuperEllipse-Q}{ShapeSuperEllipse-A}
+\end{pgflibrary}
+
+\begin{shape}{superellipse}
+This shape is defined by formula
+\begin{equation*}
+ \biggl|\frac x{r_x}\biggr|^m + \biggl|\frac y{r_y}\biggr|^n = 1
+\end{equation*}
+and will be plotted by
+\begin{align*}
+ x(t) &= |\cos t|^{\frac 2m} \cdot r_x \sgn(\cos t) \\
+ y(t) &= |\sin t|^{\frac 2n} \cdot r_y \sgn(\sin t) \\
+\end{align*}
+where $r_x$ is half the node's width and $r_y$ is half the node's height.
+
+\begin{key}{/pgf/superellipse x exponent=\meta{x exponent}(initially 2.5)}
+This sets $m$.
+\end{key}
+\begin{key}{/pgf/superellipse y exponent=\meta{y exponent}(initially 2.5)}
+This sets $n$.
+\end{key}
+\begin{key}{/pgf/superellipse step=\meta{step}(initially 5)}
+This specifies the step of the underlying plot handler.
+The smaller \meta{step} is, the slower computation will be.
+
+Sensible values for \meta{step} are integer dividers of 90, i.\,e.
+2, 3, 5, 6, 9, 10, 15, 18, 30 and 45.
+\end{key}
+\begin{key}{/pgf/superellipse exponent=\meta{exponent}}
+ Sets both |superellipse x exponent| and |superellipse y exponent| to \meta{exponent}.
+\end{key}
+
+\paragraph{Notes on Implementation}
+For implementing this shape, additional mathematical functions were declared.
+\begin{math-function}{superellipsex(\mvar{t}, \mvar{2/m}, \mvar{$r_x$})}
+\mathcommand
+Returns the $x$ value on a point of the superellipse with its center on the origin following
+\begin{equation*}
+ x = r_x\cos^{2/m} t
+\end{equation*}
+for values of $0 \leq t \leq 90$.
+\end{math-function}
+\begin{math-function}{superellipsey(\mvar{t}, \mvar{2/n}, \mvar{$r_y$})}
+\mathcommand
+Returns the $y$ value on a point of the superellipse with its center on the origin following
+\begin{equation*}
+ y = r_y\cos^{2/n} t
+\end{equation*}
+for values of $0 \leq t \leq 90$.
+\end{math-function}
+
+Both \pgfname math functions can be used at once with the following macro.
+\begin{command}{\pgfmathsuperellipseXY\marg{t}\marg{2/m}\marg{2/n}\marg{a}\marg{b}}
+Returns the $x$ value (in |\pgfmathresultX|) and the $y$ value (in |\pgfmathresultY|) of the superellipse with its center on the origin following
+\begin{align*}
+ x & = a\cos^{2/m} t \\
+ y & = b\cos^{2/n} t
+\end{align*}
+for values of $0 \leq t \leq 90$.
+
+Note: all arguments must be a valid number since they will not be parsed by \pgfname math.
+\end{command}
+
+And additional internal macro was defined following the original naming scheme.
+\def\temp{\begin{command}}%
+\expandafter\temp\expandafter{\csname pgfutil@prefix@macrotomacro\endcsname\marg{macro 1}\marg{macro 2}}
+Adds the once-expansion of \meta{macro 2} in front of \meta{macro 1}.
+\end{command}
+
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.superellipse}]
+\begin{tikzpicture}[superellipse step=1]\Huge
+\node[name=s,shape=superellipse,shape example] {Superellipse\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/right, mid/above, mid east/left,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/left, 10/right, 130/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+%
+\begin{codeexample}[width=8cm,preamble=\usetikzlibrary{ext.shapes.superellipse}]
+\begin{tikzpicture}[minimum width=1cm, minimum height=3cm]
+\foreach \xe/\ye[count=\i] in {.5/.5, 1/1, 2/2, 3/3, .5/5}
+ \node[draw, superellipse, superellipse x exponent=\xe, superellipse y exponent=\ye] at (1.5*\i,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file