我感兴趣的是在三角域上绘制三个函数,具体来说
- 坐标
- (2*x*x+2*x+2*y*y-2*y)/(2*x-2*y+4)
- x-y+1
在三角形 (-1, -1) -- (-1, 1) -- (1, -1) 上。
以下是我所拥有的:
\documentclass[10pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$y$,small,view={-45}{10},zmin=-1,zmax=1]
\clip (axis cs:-1,-1) -- (axis cs:-1,1) -- (axis cs:1,-1) -- cycle;
\addplot3[surf,color=gray,domain=-1:1,domain y=-1:1,faceted color=black,opacity=0.05] {x*y};
\addplot3[surf,color=red,domain=-1:1,domain y=-1:1,faceted color=red,opacity=0.05] {(2*x*x+2*x+2*y*y-2*y)/(2*x-2*y+4)};
\addplot3[surf,color=blue,domain=-1:1,domain y=-1:1,faceted color=blue,opacity=0.05] {x-y+1};
\end{axis}
\end{tikzpicture}
\end{document}
正如你所看到的,你什么都看不到:)如果我改变
view={-45}{10}
到
view={0}{90}
您可以看到图表。但是,使用上述视图,您看不到图表。这是为什么呢?
干杯
答案1
关键clip
是三维投影之后应用的二维构造。它仅适用于特殊情况下的三维裁剪。
你想要的是一个参数化的三角形。为此,你必须找到一个地图
X=X(s,t)
Y=Y(s,t)
对于0<= s <=1
并且0<= t <= 1
这样就(X,Y)
代表了你想要的三角形。
让我们关注简单情况:顶点为和 的单位三角形(0,0)
。 定义和 的一种可能性是使用(1,0)
(0,1)
X(s,t)
Y(s,t)
X(s,t) = s
Y(s,t) = t* (1-s)
这个非线性方程确保我们可以对矩阵进行采样t
,s
并缩放它们以使其适合三角形。当然,在这种方法中,其中一个角将接收大量数据点(您可以随意尝试使用参数图,其中domain=0:1
X 和 Y 的值是 和 )。
为了将这种方法映射到你的三角形,我们可以简单地使用一个简单的线性映射,如下所示:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$y$,
view={-45}{10},
zmin=-1,zmax=1,
variable=s,
variable y=t,
domain=0:1,
]
\def\triangleParamX{-1+ 2*s}
\def\triangleParamY{-1+ 2*(1-s)*t}
\addplot3[surf,color=gray,faceted color=black,opacity=0.05] (\triangleParamX,\triangleParamY,x*y);
\addplot3[surf,color=red,faceted color=red,opacity=0.05] (\triangleParamX,\triangleParamY,{(2*x*x+2*x+2*y*y-2*y)/(2*x-2*y+4)});
\addplot3[surf,color=blue,faceted color=blue,opacity=0.05] (\triangleParamX,\triangleParamY,{x-y+1});
\end{axis}
\end{tikzpicture}
\end{document}
以下是带有 的图像view={0}{90}
:
请注意,参数图需要X(s,t)
、Y(s,t)
和Z(s,t)
。在我的解决方案中,Z
取决于隐含地和s
:t
它取决于x
和y
。这是 的一个特殊功能pgfplots
:它分别将数学变量x
和定义y
为最终数字X(s,t)
和Y(s,t)
。因此,我们可以用和Z
来定义(因为 pgfplots在 之前评估和)。这也是我定义和 的原因,否则采样变量和由此产生的和会相互覆盖。x
y
X
Y
Z
variable=s
variable y=t
X
Y