Построить график разницы между двумя кривыми Безье

Построить график разницы между двумя кривыми Безье

У меня есть следующий код для построения двух параболоподобных «функций»:

\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 между этими двумя кривыми? Например, разместив N маркеров вдоль каждой функции с регулярными шагами координаты x и взяв разность координаты 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}

введите описание изображения здесь

Связанный контент