# Can this “curvy” region be replicated in TikZ?

I'm trying to replicate this picture (from wikipedia) with TikZ:

The part on the left is straightforward but I'm struggling to come up with ideas for the part on the right.

• This can be achieved rather easily, either with projections from 3D, nonlinear transformations or just by hand. – Schrödinger's cat Jan 24 at 3:08
• @Schrödinger'scat what do you mean “projections from 3D” ? – Black Mild Jan 24 at 6:12
• @BlackMild You can draw something in 3D and project it on the screen. The pic on the right looks a bit like a surface in 3D. – Schrödinger's cat Jan 24 at 6:22

This employs a nonlinear transformation to produce a similar output.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\definecolor{myblue}{RGB}{191,202,236}
\definecolor{myred}{RGB}{185,134,146}
\usepgfmodule{nonlineartransformations}
\makeatletter
\def\curvytransformation{%
\pgfmathsetmacro{\myx}{\pgf@x+0.3*\pgf@y-3*sin(\pgf@y*2)}%
\pgfmathsetmacro{\myy}{\pgf@y-10*sin(\pgf@x)}%
\pgf@x=\myx pt%
\pgf@y=\myy pt%
}
\makeatother
\begin{document}
\begin{tikzpicture}[>=stealth]
\begin{scope}[xshift=-10cm,local bounding box=L]
\draw[fill=myblue] (0,0) rectangle (8,8);
\draw[help lines] (0,0) grid (8,8);
\draw[thick,fill=myred] (1,1) rectangle (7,7);
\draw[help lines] (1,1) grid (7,7);
\draw[very thick,<->] (1,7) |- (7,1);
\end{scope}
%
\begin{scope}[local bounding box=R]
\pgftransformnonlinear{\curvytransformation}%
\draw[fill=myblue] (0,0) rectangle (8,8);
\draw[help lines] (0,0) grid (8,8);
\draw[thick,fill=myred] (1,1) rectangle (7,7);
\draw[help lines] (1,1) grid (7,7);
\path (1,1) coordinate (o) (1,1.1) coordinate (y) (1.1,1) coordinate (x);
\end{scope}
\draw[fill=white,fill opacity=0.2] let \p1=($(y)-(o)$),\p2=($(x)-(o)$),
\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)} in
[fill=white,fill opacity=0.2] (o) -- ++(\n1:6.25) coordinate (y')
-- ++(\n2:6.25) -- ++(\n1+180:6.25) coordinate (x')
-- cycle;
\draw[very thick,<->] (y') -- (o) -- (x');
%
\draw[-stealth,thick] (-1.5,4) to[bend left=10] node[above]{$f$} (0.5,4);
\end{tikzpicture}
\end{document}


• Good answer!! Can you write the expression of the nonlinear transformation, please? Thank you, as always. – manooooh Jan 24 at 5:02
• @manooooh It is all in the code. (\pgf@x,\pgf@y) gets mapped to (\pgf@x+0.3*\pgf@y-3*sin(\pgf@y*2), \pgf@y-10*sin(\pgf@x)). – Schrödinger's cat Jan 24 at 5:04
• As usual excellent answer ! – Alain Matthes Jan 24 at 13:32