Eu tenho o seguinte código para traçar duas "funções" semelhantes a parábolas:
\begin{tikzpicture}[
remember picture,
overlay
]
\tikzmath{
\w = 4;
\yVs0 = 2;
\yVsl = 1;
\yVsf = 3;
\yss0 = \yVs0*2;
\yssl = \yVsl*1.5;
\yssf = \yVsf*1.1;
}
\tikzset{
shift={(current page.center)}
}
\begin{scope}[
shift={($0.5*(-\w,-\w)$)}
]
\draw[->,thick] (0,0) -- (\w,0);
\draw[
blue]
(0,\yVs0) .. controls (\w*1/4,\yVsl) and (\w*3/4,\yVsl) .. (\w,\yVsf);
\draw[
red]
(0,\yss0) .. controls (\w*1/4,\yssl) and (\w*3/4,\yssl) .. (\w,\yssf);
\end{scope}
\end{tikzpicture}
Como posso traçar a diferença da coordenada y entre essas duas curvas? Por exemplo, colocando N marcadores ao longo de cada função em etapas regulares da coordenada x e calculando a diferença da coordenada y entre elas.
Responder1
Esta é uma forma de força bruta usando interseções. Ele calcula as interseções com alguns caminhos verticais e a diferença de seus valores y, armazena-os em uma lista e traça a lista.
\documentclass[tikz,margin=3mm]{standalone}
\usetikzlibrary{calc,intersections,math}
\begin{document}
\begin{tikzpicture}
\tikzmath{
\w = 4;
\yVs0 = 2;
\yVsl = 1;
\yVsf = 3;
\yss0 = \yVs0*2;
\yssl = \yVsl*1.5;
\yssf = \yVsf*1.1;
}
\tikzset{
shift={(current page.center)}
}
\begin{scope}[
shift={($0.5*(-\w,-\w)$)}
]
\draw[->,thick] (0,0) -- (\w,0);
\draw[name path=A,
blue]
(0,\yVs0) .. controls (\w*1/4,\yVsl) and (\w*3/4,\yVsl) .. (\w,\yVsf);
\draw[name path=B,
red]
(0,\yss0) .. controls (\w*1/4,\yssl) and (\w*3/4,\yssl) .. (\w,\yssf);
\edef\lstCoords{(0,\yss0-\yVs0)}
\foreach \X in {1,...,9}
{\pgfmathsetmacro{\myx}{\X*0.1*\w}
\path[name path=vert,overlay] ([yshift=-1pt]current bounding box.south-|\myx,0)
-- ([yshift=1pt]current bounding box.north-|\myx,0);
\path[name intersections={of=A and vert,by=i1},name intersections={of=B and vert,by=i2}]
let \p1=($(i2)-(i1)$) in \pgfextra{\xdef\lstCoords{\lstCoords (\myx,\y1)}};
}
\edef\lstCoords{\lstCoords (\w,\yssf-\yVsf)}
\draw[orange] plot[smooth] coordinates {\lstCoords};
\end{scope}
\end{tikzpicture}
\end{document}