두 개의 포물선 모양의 "함수"를 플롯하는 다음 코드가 있습니다.
\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}
이 두 곡선 사이의 y 좌표 차이를 어떻게 플롯할 수 있나요? 예를 들어, 일반적인 x 좌표 단계에서 각 함수를 따라 N개의 마커를 배치하고 이들의 y 좌표 차이를 취합니다.
답변1
이것은 교차로를 이용한 무차별적인 방법입니다. 일부 수직 경로와의 교차점과 해당 y 값의 차이를 계산하여 목록에 저장하고 목록을 그립니다.
\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}