Рисование сплошных линий на 3D-графиках

Рисование сплошных линий на 3D-графиках

Я пытаюсь нарисовать линию, движущуюся вместе с трехмерным графиком, чтобы обозначить область интегрирования.

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

Итак, для этого черная линия внизу представляет собой отсечку для области интегрирования. Я хотел бы иметь след линии, движущейся вдоль поверхности функции. Вот MWE:

\PassOptionsToPackage{usenames,dvipsnames,table,x11names}{xcolor}
\documentclass[a4paper, 12pt]{article}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps,fillbetween}

\begin{document}

\begin{tikzpicture}

\begin{axis}[
zmax=15,
zmin=0,
view = {45}{45},
grid=minor,
colormap={mycol}{color=(Tan), color=(Tan)},
xlabel = $s$,
ylabel = $h$,
zlabel = {$f(s,h)$},
ticks = none,
]

\addplot3[
surf,
samples=30,
domain=0:1.5,
opacity=0.5,
]
{12*exp(-(4*x+3*y))};

\draw[black, thick] (0,0,0) -- (1.5,1.5,0);

\addplot3 [name path = xline, draw = none, domain=0:1.5] (x,0,0);
\addplot3 [name path = xcurve, domain=0:1.5, y domain = 0:0, draw = none] 
    (x, 0, {12*exp(-(4*x))});
\addplot [color = Tan, opacity = 0.5, draw = none]
  fill between[of = xcurve and xline];

\addplot3[
mesh,
draw=Bittersweet,
samples=30,
domain=0:1.5,
opacity = 0.75
]
{12*exp(-(4*x+3*y))};

% Attempt 1
%\addplot3 [domain=0:1.5, black, thick, samples=30] (x,x,{12*exp(-(4*x+3*y))});

%Attempt 2
%\addplot3 [domain=0:1.5, black, thick, samples=30] (x,x,{12*exp(-(7*x))});

\end{axis}
\end{tikzpicture}

Две закомментированные строки в конце, которые я назвал Попытка 1 и Попытка 2, как раз и есть мои две попытки сделать это. Вот результат для каждой из них:

Попытка 1

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

Попытка 2

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

Попытка 1 — беспорядок, но попытка 2 очень близка к тому, что я хочу, но она рисует линию через начальную и конечную точки функции. Есть предложения, как это исправить?

решение1

Вы уже были на правильном пути. Вы можете достичь желаемого, добавив samples y=1ко второй попытке.

(Кроме того, я внес некоторые незначительные оптимизации в ваш код. Подробности смотрите в комментариях к коду.)

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}
    \usepgfplotslibrary{fillbetween}
    \pgfplotsset{
        compat=1.16,
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        zmax=15,
        zmin=0,
        view={45}{45},
        grid=minor,
        colormap={mycol}{color=(Tan), color=(Tan)},
        xlabel=$s$,
        ylabel=$h$,
        zlabel={$f(s,h)$},
        ticks=none,
        % (moved common options here)
        domain=0:1.5,
        samples=30,
    ]

        \addplot3[
            surf,
            opacity=0.5,
            % removed one `\addplot' by adding the next line
            faceted color=Bittersweet,
        ] {12*exp(-(4*x+3*y))};

        \draw [black, thick] (0,0,0) -- (1.5,1.5,0);

        \addplot3 [
            name path=xline,
            draw=none,
        ] (x,0,0);
        \addplot3 [
            name path=xcurve,
            % replaced this ...
%            y domain=0:0,
            % by ...
            samples y=1,
            draw=none,
        ] (x,0,{12*exp(-(4*x))});
        \addplot [color=Tan, opacity=0.5]
            fill between [of=xcurve and xline];


        % Attempt 2
        \addplot3 [
            black,
            thick,
            samples y=1,        % <-- added
        ] (x,x,{12*exp(-7*x)});

    \end{axis}
\end{tikzpicture}
\end{document}

изображение, показывающее результат кода выше

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