为了说明二维空间中线性组合的概念,我制作了一个基于两个线性独立向量的非矩形坐标系的讲义。我使用了一系列平行线来实现这一点。我想剪裁该图以仅显示线实际相交的区域。该区域的边界是平行四边形。我该怎么做呢?我可以手动调整每条线的域,但这会非常繁琐。此外,如果您有更优雅的方法来实现我的总体目标,请分享。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=1.0,x=1.0cm,y=1.0cm,>=latex,font=\footnotesize]
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)-5});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)-4});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)-3});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)-2});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)-1});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)+1});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)+2});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)+3});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)+4});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(\x)+5});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)-5});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)-4});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)-3});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)-2});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)-1});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)+1});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)+2});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)+3});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)+4});
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{(-1/2)*(\x)+5});
\draw[->,very thick] (0,0) -- (.666,.666) node[above left] {$\mathbf{u}$};
\draw[->,very thick] (0,0) -- (.666,-.333) node[below ] {$\mathbf{v}$};
\end{tikzpicture}
\end{center}
\end{document}
答案1
TikZ 还支持不同的坐标系。方向向量X和是(和是)可以通过坐标系的向量明确设置xy canvas
:
x={(1cm, 1cm)},
y={(1cm, -.5cm)},
然后网格线和矢量线可以通过 uv(=xy)坐标系的简单整数指定。根本不需要裁剪。
例子:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[
>=latex,
% font=\footnotesize,
x={(1cm, 1cm)},
y={(1cm, -.5cm)},
]
\def\xmin{-2}
\def\xmax{3}
\def\ymin{-2}
\def\ymax{3}
\draw[thin, dashed]
\foreach \x in {\xmin, ..., \xmax} {
(\x, \ymin) -- (\x, \ymax)
}
\foreach \y in {\ymin, ..., \ymax} {
(\xmin, \y) -- (\xmax, \y)
}
;
\draw[<->, very thick]
(1, 0) node[above left] {$\mathbf{u}$}
-- (0, 0)
-- (0, 1) node[below] {$\mathbf{v}$}
;
\end{tikzpicture}
\end{center}
\end{document}
答案2
像这样?
您可以使用\clip <path specification>;
指定要剪辑其范围内的所有内容的区域。在这里,图片中的其他所有内容都在剪辑范围内,因为这只是用作环境中的第一步tikzpicture
。
如果我理解正确的话,你想要的是类似这样的东西:
\clip (0,-5) -- +(-5,2.5) -- (-5,0) -- (0,5) -- (5,2.5) -- (5,0) -- cycle;
这不是平行四边形,因为原始图中没有画出两个角。显然,您可以根据需要进行调整。
您还可以使用循环更简洁地指定绘图。在这里,内循环遍历\i
从-5
到的值5
,外循环遍历\j
两个值1
和.5
。这将现有绘图的代码简化为
\foreach \j in {1,-.5}
\foreach \i in {-5,...,5}
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{\j*(\x)+\i});;
通过剪辑以及使用两个命令创建箭头,图像就完成了。
完整代码:
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[scale=1.0,x=1.0cm,y=1.0cm,>=latex,font=\footnotesize]
\clip (0,-5) -- +(-5,2.5) -- (-5,0) -- (0,5) -- (5,2.5) -- (5,0) -- cycle;
\foreach \j in {1,-.5}
\foreach \i in {-5,...,5}
\draw[-,thin,dashed,samples=100,domain=-5:5] plot (\x,{\j*(\x)+\i});;
\draw[->,very thick] (0,0) -- (.666,.666) node[above left] {$\mathbf{u}$};
\draw[->,very thick] (0,0) -- (.666,-.333) node[below] {$\mathbf{v}$};
\end{tikzpicture}
\end{document}
答案3
这就是您想要实现的目标吗?
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=1.0,x=1.0cm,y=1.0cm,>=latex,font=\footnotesize]
\clip
(0,-5) -- (5,0) -- (5,2.5) -- (0,5) -- (-5,0) -- (-5,-2.5) -- cycle;
\foreach \Value in {-5,...,5}
{
\draw[-,thin,dashed,domain=-5:5] plot (\x,{(\x)+\Value});
\draw[-,thin,dashed,domain=-5:5] plot (\x,{(-1/2)*(\x)+\Value});
}
\draw[->,very thick] (0,0) -- (.666,.666) node[above left] {$\mathbf{u}$};
\draw[->,very thick] (0,0) -- (.666,-.333) node[below ] {$\mathbf{v}$};
\end{tikzpicture}
\end{center}
\end{document}
请注意,使用 可以\foreach
大大简化代码。另外,由于您绘制的是直线,因此不需要添加太多内容samples=100
(除了会使编译时间更长)。
如果想得到真正的平行四边形,修改很简单:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=1.0,x=1.0cm,y=1.0cm,>=latex,font=\footnotesize]
\clip
(0,-3) -- (4.66666,1.66666) -- (0,4) -- (-4.66666,-0.66666) -- cycle;
\foreach \Value in {-3,...,4}
{
\draw[-,thin,dashed,domain=-5:5] plot (\x,{(\x)+\Value});
\draw[-,thin,dashed,domain=-5:5] plot (\x,{(-1/2)*(\x)+\Value});
}
\draw[->,very thick] (-0.66666,0.33333) -- ++(0.666,.666) node[above left] {$\mathbf{u}$};
\draw[->,very thick] (-0.66666,0.33333) -- ++(.666,-.333) node[below ] {$\mathbf{v}$};
\end{tikzpicture}
\end{center}
\end{document}