我想绘制2x+2y-z+9=0
和通过点和的2x+2y-z-9=0
线,但我认为我在平面公式中犯了一个错误,因为我认为这里没有我在 GeoGebra 中看到的图:X=(-1,0,4)+λ(2,2,-1)
(-1,0,4)
(1,2,3)
红色轴为x
-轴,绿色轴为y
-轴。
我们如何才能制作类似于第二幅图的图形?
\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\pgfplotsset{holdot/.style={color=red,fill=white,very thick,only marks,mark=*}}
\begin{document}
\begin{tikzpicture}[declare function={f1(\x,\y)=2*\x+2*\y+9;f2(\x,\y)=2*\x+2*\y-9;}]
\begin{axis}[
axis on top,
legend pos=outer north east,
axis lines = center,
xticklabel style = {font=\tiny},
yticklabel style = {font=\tiny},
zticklabel style = {font=\tiny},
xlabel = $x$,
ylabel = $y$,
zlabel = $z$,
legend style={cells={align=left}},
legend cell align={left},
view={-160}{25},
clip=false
]
\draw[red,very thick] (-1,0,4) -- (1,2,3);
\addplot3[surf,mesh/ordering=y varies,shader=interp] {f1(x,y)};
\addplot3[surf,mesh/ordering=y varies,shader=interp] {f2(x,y)};
\addplot3[soldot] coordinates {(0,-9/2,0)} node[above right] {\((0,-\frac92,0)\)};
\end{axis}
\end{tikzpicture}
\end{document}
谢谢!
编辑。 塞巴斯蒂亚诺的好建议显示两个z
轴的缩放值不同。因此,我从这个 MWE 中删除clip=false
并添加了一些zmin=-1,zmax=5
内容,但现在图表似乎被“切断”了:
我想像view={-160}{25}
GeoGebra 一样保留正方形(带有的菱形)。
答案1
现在这更像是一个答案。
- 我使用
unit vector ratio=1 1 1
来防止轴被以不同的方式重新缩放。 - 我“手工”剪辑了这张照片。
- 这又有点像数学问题了。我对平面使用了不同的参数化。基本观察是,对于给定的
z
,x+y
是常数。这表明切换到新变量u=(x+y)/2
和v=(x-y)/2
,并将它们重命名为x
和y
。在新坐标中, 的域v
(已重命名y
)控制平面的“宽度”,即对于给定的 ,它的延伸距离z
。 的域u
,即新的 ,x
被认为是z
从-5
到5
,如果增加这个域,平面会变得更高。 - 在这个新的参数化中,很容易将平面分成两部分,一部分为负
z
,一部分为正z
。所以我先画负的,然后画一个x-y
平面,最后画正的。红线是根据同样的逻辑画的。
所以代码变成
\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=16cm,
set layers,colormap/viridis,
legend pos=outer north east,
axis lines = center,
xticklabel style = {font=\tiny},
yticklabel style = {font=\tiny},
zticklabel style = {font=\tiny},
xlabel = $x$,
ylabel = $y$,
zlabel = $z$,ztick={2,4},%zticklabels={},
legend style={cells={align=left}},
legend cell align={left},
view={-160}{25},
unit vector ratio=1 1 1,xmin=-6,xmax=6,ymin=-6,ymax=6,zmin=-5,zmax=5,
clip=false
]
\clip ([xshift=1.5cm,yshift=1.5cm]current axis.south west) rectangle
([xshift=-1.5cm,yshift=-1.5cm]current axis.north east);
\addplot3[surf,mesh/ordering=y varies,shader=interp,
domain=2:4.5,domain y=-8:8] ({(x+y)/2},{(x-y)/2},{2*x-9});
\addplot3[surf,mesh/ordering=y varies,shader=interp,
domain=-7:-4.5,domain y=-8:8] ({(x+y)/2},{(x-y)/2},{2*x+9});
\addplot3[surf,blue,
domain=-6:6,domain y=-6:6,opacity=0.5] {0};
\draw[red,very thick] (-5/3, -2/3, 13/3) -- (-4-5/3,-4-2/3,2+13/3);
\addplot3[surf,mesh/ordering=y varies,shader=interp,
domain=-4.5:-2,domain y=-8:8] ({(x+y)/2},{(x-y)/2},{2*x+9});
\draw[red,very thick] (-5/3, -2/3, 13/3) -- (7/3, 10/3, 7/3);
\addplot3[surf,mesh/ordering=y varies,shader=interp,
domain=4.5:7,domain y=-8:8] ({(x+y)/2},{(x-y)/2},{2*x-9});
\draw[red,very thick] (7/3, 10/3, 7/3) -- (7/3+4, 10/3+4, 7/3-2);
\end{axis}
\end{tikzpicture}
\end{document}
通过在平面方程中插入直线的参数化并求解 lambda,可以找到直线与平面的相交点。