我如何平移椭圆体并同时正确缩放它?

我如何平移椭圆体并同时正确缩放它?

我有这个代码来绘制椭圆体,但我希望能够将其翻译成中心在(3,3,3)。现在我还不确定如何,因为它似乎工作正常,但一旦我改变长度宽度高度结果很奇怪。 下面是length=3width=2和 的结果height=1在此处输入图片描述

这是我的代码翻译后但没有缩放(很大程度上受到以下启发:绘制椭圆体

\documentclass{article}
\usepackage{pgfplots}
\usepackage{float}

\begin{document}

\begin{figure}[H]
    \centering
    \begin{tikzpicture}
        \def\translatex{3}
        \def\translatey{3}
        \def\translatez{3}
        
        \def\length{1}
        \def\width{1}
        \def\height{1}    
    
        \begin{axis} [view={135}{20},colormap/redyellow,
            axis lines=center, axis on top,ticks=none,
            set layers=default,axis equal,
            xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
            xlabel style={anchor=south east},
            ylabel style={anchor=south west},
            zlabel style={anchor=south west},
            enlargelimits,
            tick align=inside,
            domain=0:10,
            y domain=0:10,
            samples=20, 
            z buffer=sort,
        ]
        \addplot3 [surf,opacity=0.4,domain=-1:0,
            domain y=0:360] ({\translatex+\length*sin(y)*sqrt(1-x^2)},{\translatey+\width*cos(y)*sqrt(1-x^2)},{\translatez+\height*x});
        \addplot3 [surf,opacity=0.4,domain=0:1,
            domain y=0:360,on layer=axis foreground] ({\translatex+\length*sin(y)*sqrt(1-x^2)},{\translatey+\width*cos(y)*sqrt(1-x^2)},{\translatez+\height*x});
        \end{axis}
    \end{tikzpicture}
    \caption{Tilføj navn 2}
    \label{fig:tilføj_navn_2}
\end{figure}

\end{document}

现在它显示如下内容:

已平移但未缩放

答案1

我不知道你说的“奇怪”是什么意思。轴在 处没有完全相交(0,0,0),但我怀疑你看不出来。要纠正它,你需要设置例如 z 比例。

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\translatex}{3}
\pgfmathsetmacro{\translatey}{3}
\pgfmathsetmacro{\translatez}{3}
\pgfmathsetmacro{\length}{3}
\pgfmathsetmacro{\width}{2}
\pgfmathsetmacro{\height}{1}    
\begin{axis}[
view={135}{22},
zmin=0, zmax=5,
colormap/redyellow,
axis lines=center, axis on top, axis equal, ticks=none,
xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
xlabel style={anchor=south east}, ylabel style={anchor=south west}, zlabel style={anchor=south west},
]
\addplot3[
surf, opacity=0.4, 
domain=-1:1, samples=40,
y domain=0:360, samples y=20,
z buffer=sort,
] ({\translatex+\length*sin(y)*sqrt(1-x^2)},{\translatey+\width*cos(y)*sqrt(1-x^2)},{\translatez+\height*x});
\end{axis}
\end{tikzpicture}
\end{document}

3D 图形中的椭圆体

你可以选择画一些帮助线

\draw[dashed] (3,0,0) -- (3,3,0) (0,3,0) -- (3,3,0) (3,3,0) -- (3,3,3);

三维图形中的椭圆体和虚线

或者选择更好的视角

view={110}{20},

三维图形中的椭圆体和虚线

不带opacityaxis on top

三维图形中的椭圆体和虚线

相关内容