So zeichnen Sie die Funktion `x^2+xy+2` mit `PGFPlots`

So zeichnen Sie die Funktion `x^2+xy+2` mit `PGFPlots`

Ich würde gerne plotten z=x^2+xy+2.

Folgendes möchte ich:

Was ich möchte

Allerdings kann ich die Oberfläche nicht schöner gestalten.

MWE:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}

\begin{document}

\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=\x*\x+\x*\y+2;}]
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={135}{25}
            ]
            \addplot3[surf,domain=0:10,domain y=0:5,restrict z to domain=0:6,samples=61,samples y=61] {x*x+x*y+2};
            \addlegendentry{\(z=x^2+xy+2\)}
            \addplot3[red,thick,variable=\t,domain=-1:3,samples y=0] ({1+4*t},{2+t},{5-t});
            \addlegendentry{\(r\)}
            \addplot3[green,thick,variable=\t,domain=-1:2,samples y=0] ({4+5*t},{-2+6*t},{3});
            \addlegendentry{\(\vec X\)}
            \addplot3[soldot] coordinates {(1,2,5)} node[above right] {$A$};
            \addplot3[soldot] coordinates {(9,4,3)} node[left] {$r\cap\vec X$};
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

MWE-Ausgabe

BEARBEITEN.Danke an dieMurmeltiers nützlicher KommentarIch könnte es besser aussehen lassen:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\begin{document}

\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=\x*\x+\x*\y+2;}]
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmax=6,
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={135}{25}
            ]
            \addplot3[surf,domain=-5:10,domain y=-3:5,samples=61,samples y=61,z buffer=sort] {x*x+x*y+2};
            \addlegendentry{\(z=x^2+xy+2\)}
            \addplot3[red,thick,variable=\t,domain=-1:3,samples y=0] ({1+4*t},{2+t},{5-t});
            \addlegendentry{\(r\)}
            \addplot3[green,thick,variable=\t,domain=-1:2,samples y=0] ({4+5*t},{-2+6*t},{3});
            \addlegendentry{\(\vec X\)}
            \addplot3[soldot] coordinates {(1,2,5)} node[above right] {$A$};
            \addplot3[soldot] coordinates {(9,4,3)} node[left] {$r\cap\vec X$};
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

Verbesserte Handlung

Jedoch,Ich möchte, dass die Grafik die Farbpalette hat(alles blau ist nicht ganz richtig).

Danke!!

Antwort1

Ihre Plotfunktion ist eine quadratische Form, die durch eine Basistransformation diagonalisiert werden kann, was in diesem Fall eine Drehung um 22,5 Grad ist. In der gedrehten Basis ist es einfacher, die Funktion zu zeichnen.

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\begin{document}

\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=\x*\x+\x*\y+2;}]
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmax=6,
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={135}{25}
            ]
%             \addplot3[surf,domain=-5:10,domain y=-3:5,samples=21,samples y=21,z buffer=sort] 
%           {x*x+x*y+2};
            \addplot3[surf,domain=-5:5,domain y=-5:5,samples=61,samples y=61,z
            buffer=sort,point meta=z] 
            ({cos(22.5)*x-sin(22.5)*y},{cos(22.5)*y+sin(22.5)*x},{(4 + (1 + sqrt(2))*x*x - (-1 + sqrt(2))*y*y)/2});         

            \addlegendentry{\(z=x^2+xy+2\)}
            \addplot3[red,thick,variable=\t,domain=-1:3,samples y=0] ({1+4*t},{2+t},{5-t});
            \addlegendentry{\(r\)}
            \addplot3[green,thick,variable=\t,domain=-1:2,samples y=0] ({4+5*t},{-2+6*t},{3});
            \addlegendentry{\(\vec X\)}
            \addplot3[soldot] coordinates {(1,2,5)} node[above right] {$A$};
            \addplot3[soldot] coordinates {(9,4,3)} node[left] {$r\cap\vec X$};
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

Bildbeschreibung hier eingeben

Den verborgenen Teil der roten Linie ausblenden:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\begin{document}

\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=\x*\x+\x*\y+2;}]
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmax=6,
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={135}{25}
            ]
%             \addplot3[surf,domain=-5:10,domain y=-3:5,samples=21,samples y=21,z buffer=sort] 
%           {x*x+x*y+2};
            %\addplot3[red,thick,variable=\t,domain=-1:0,samples y=0] ({1+4*t},{2+t},{5-t});
            \addplot3[surf,domain=-5:5,domain y=-5:5,samples=61,samples y=61,z
            buffer=sort,point meta=z] 
            ({cos(22.5)*x-sin(22.5)*y},{cos(22.5)*y+sin(22.5)*x},{(4 + (1 + sqrt(2))*x*x - (-1 + sqrt(2))*y*y)/2});         

            \addlegendentry{\(z=x^2+xy+2\)}
            \addplot3[red,thick,variable=\t,domain=0:3,samples y=0] ({1+4*t},{2+t},{5-t});
            \addlegendentry{\(r\)}
            \addplot3[green,thick,variable=\t,domain=-1:2,samples y=0] ({4+5*t},{-2+6*t},{3});
            \addlegendentry{\(\vec X\)}
            \addplot3[soldot] coordinates {(1,2,5)} node[above right] {$A$};
            \addplot3[soldot] coordinates {(9,4,3)} node[left] {$r\cap\vec X$};
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

Bildbeschreibung hier eingeben

So können Sie das Diagramm einschränken. Berechnen Sie eine Funktion xcrit(y), die bestimmt, was xfür eine gegebene Zahl gelten muss y, damit die Funktion einen bestimmten konstanten Wert hat. Verwenden Sie diese Funktion, um das Diagramm zu beschneiden.

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.16,width=15cm}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\begin{document}

\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=\x*\x+\x*\y+2;
        ftransformed(\x,\y)=(4 + (1 + sqrt(2))*\x*\x - (-1 + sqrt(2))*\y*\y)/2;
    xcrit(\y,\c)=sqrt(-1 + sqrt(2))*sqrt(-4 + 2*\c + 
     (-1 + sqrt(2))*\y*\y);}]
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmax=6,
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={135}{25}
            ]
%             \addplot3[surf,domain=-5:10,domain y=-3:5,samples=21,samples y=21,z buffer=sort] 
%           {x*x+x*y+2};
            %\addplot3[red,thick,variable=\t,domain=-1:0,samples y=0] ({1+4*t},{2+t},{5-t});
            \begin{scope}
             \clip plot[variable=\y,domain=-6:6]
              ({-cos(22.5)*xcrit(\y,6)-sin(22.5)*\y},{cos(22.5)*\y-sin(22.5)*xcrit(\y,6)},{6})
              -- ({-cos(22.5)*xcrit(6,6)-sin(22.5)*6},{cos(22.5)*6-sin(22.5)*xcrit(6,6)},{-10})
              --({-cos(22.5)*xcrit(-6,6)+sin(22.5)*6},{-cos(22.5)*6-sin(22.5)*xcrit(-6,6)},{-10})
              ;         
             \addplot3[surf,domain=-5:0,domain y=-5:5,samples=31,samples y=61,z
              buffer=sort,point meta=z,forget plot]            
             ({cos(22.5)*x-sin(22.5)*y},{cos(22.5)*y+sin(22.5)*x},{ftransformed(x,y)});         
            \end{scope}
            \begin{scope}
            \clip plot[variable=\y,domain=-7:7]
             ({cos(22.5)*xcrit(\y,6)-sin(22.5)*\y},{cos(22.5)*\y+sin(22.5)*xcrit(\y,6)},{6})
             -- ({cos(22.5)*xcrit(7,6)-sin(22.5)*6},{cos(22.5)*6+sin(22.5)*xcrit(7,6)},{-10})
             --({cos(22.5)*xcrit(-7,6)+sin(22.5)*6},{-cos(22.5)*6+sin(22.5)*xcrit(-7,6)},{-10})
             ;          
             \addplot3[surf,domain=0:5,domain y=-5:5,samples=31,samples y=61,z
             buffer=sort,point meta=z]            
            ({cos(22.5)*x-sin(22.5)*y},{cos(22.5)*y+sin(22.5)*x},{ftransformed(x,y)});         
            \end{scope}
%           \draw[thick,red] plot[variable=\y,domain=-5:5]
%            ({cos(22.5)*xcrit(\y,6)-sin(22.5)*\y},{cos(22.5)*\y+sin(22.5)*xcrit(\y,6)},{6});
            \addlegendentry{\(z=x^2+xy+2\)}
            \addplot3[red,thick,variable=\t,domain=0:3,samples y=0] ({1+4*t},{2+t},{5-t});
            \addlegendentry{\(r\)}
            \addplot3[green,thick,variable=\t,domain=-1:2,samples y=0] ({4+5*t},{-2+6*t},{3});
            \addlegendentry{\(\vec X\)}
            \addplot3[soldot] coordinates {(1,2,5)} node[above right] {$A$};
            \addplot3[soldot] coordinates {(9,4,3)} node[left] {$r\cap\vec X$};
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen