Tikz 绘制 3D

Tikz 绘制 3D

我正在尝试使用 tikz 制作 3d 图,但我无法做到。我总是得到乱七八糟的线条,乱七八糟地向各个方向延伸。我想绘制 f(x,y) = x^3 / y^2。我能够使用 gnuplot 做到这一点:

            \begin{gnuplot}
                set terminal epslatex color
                set size 1,1
                set isosamples 100
                unset key
                set grid
                set xrange [-5:5]
                set yrange [-5:5]
                set zrange [-5:5]
                set hidden3d
                set view 62, 308, 1, 1
                splot x**3 / y**2 lt rgb "red"
            \end{gnuplot}

结果如下:

在此处输入图片描述

这个解决方案仍然有一些问题。例如,对于 (0,0,0) 周围的区域,样本非常少,因此有很多空白,边缘很尖锐。我的问题是:使用 tikz 制作这个图是否可行?对于 (0,0,0) 周围的区域,图是否可以更平滑、更好看?如果是真的,你能帮助我吗?

答案1

使用 R 代替 gnuplot:

姆韦

\documentclass{article}
\begin{document}
<<echo=F,dev="tikz",message=FALSE>>=
s <- function (x, y) {return (x^3/y^2)}
x <- seq(-1, 1, length= 30)
y <- x
z <- outer(x, y, s)
library(lattice)
library(gridExtra)
trellis.par.set("axis.line", list(col=NA,lty=1,lwd=1))
wireframe(z, drape=T, shade=T, xlab="x", ylab="y", 
col.regions=rainbow(150), ylim=c(12,18), 
scales = list(arrows = FALSE),  
colorkey=F)
@
\end{document}

答案2

按照我的回答在 tikz 中绘制三维曲面,极限为无穷大,我通过软件包将计算机代数系统 SAGE 与 LaTeX 结合起来sagetex。首先,了解情节会是什么样子会有所帮助。转到Sage 单元服务器并输入以下几行:

var('y')
plot3d(x^3/y^2,(x,-2,2),(y,-2,2))

然后enter旋转你会看到如下图片: 在此处输入图片描述

现在您知道表面应该是什么样子,我们可以看到问题在于高度值在正方向和负方向上急剧上升。使用我上面引用的答案中发布的代码的修改,我们得到:

\documentclass[11pt,border={10pt 10pt 10pt 10pt}]{standalone}
\usepackage{pgfplots}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
x = var('x')
y = var('y')
step = .25
x1 = -4
x2 = 4
y1 = -4
y2 = 4
output = ""
output += r"\begin{tikzpicture}[scale=1.0]"
output += r"\begin{axis}[view={-35}{45},xmin=%d, xmax=%d, ymin=%d, ymax=%d]"%(x1,x2,y1,y2-step)
output += r"\addplot3[surf,mesh/rows=%d] coordinates {"%((y2-step-y1)/step+1)
# rows is the number of y values
for y in srange(y1,y2,step):
    for x in srange(x1,x2,step):
        if (x^3/y^2)<200 and (x^3/y^2)>-200:
            output += r"(%f, %f, %f) "%(x,y,x^3/y^2)
        elif (x^3/y^2)<=-10:
            output += r"(%f, %f, %f) "%(x,y,-200)
        else:
            output += r"(%f, %f, %f) "%(x,y,200)
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}

代码将每个高度至少为 200 乘以 20,将每个高度小于 -200 替换为 -200。这为绘图提供了一个上限。将视角更改view={-35}{45}为可以更好地说明绘图行为的角度,我们得到以下结果: 在此处输入图片描述

如果不使用 Sage,每次都要做更多工作来防止边缘参差不齐。有时这比其他时候更容易;接受的答案转换为极坐标。最近的一个问题是另一种解决方案。SAGE 不是 LaTeX 的一部分,因此您必须将其安装在计算机上,或者通过免费可钙帐户。如果您要绘制这样的表面,那么这可能是一个不错的工具。文档sagetex这里在 CTAN 上。

相关内容