答案1
这是使用 TikZ 的快速演示,部分基于 Thruston 的 Metapost 答案。
从正方形开始,制作正方形最简单的方法是 TikZrectangle
操作,其用途如下
\draw (x1,y1) rectangle (x2,y2);
因此,只需用 between 这个词指定两个对角的坐标rectangle
。
对于其他形状,你可以逐段绘制线条,例如
\draw (0,0) -- (0,1) -- (1,1);
它从 (0,0) 到 (0,1) 再到 (1,1) 画一条线。
要在行尾添加点,您可以使用arrows.meta
库中的箭头。因此,您需要将其添加\usetikzlibrary{arrows.meta}
到前言中。箭头在命令的可选参数中指定\draw
,通常为\draw [<name of arrow tip>-<name of arrow tip>] ...;
。箭头可以添加到路径的一端或两端。
因此,要在线的末端添加黑点,请使用
\draw [{Circle[]}-{Circle[]}] (0,0) -- (0,1);
Circle[]
是箭头尖的名称。之所以在其周围使用括号对 ( {}
),是因为您需要向解析器“隐藏”括号,这样]
箭头尖的右括号 ( ) 就不会与 的可选参数的右括号混淆\draw
。
弧线可以用多种方式绘制。在下面的代码中,我使用了语法。这在和(x1,y1) .. controls (x2,y2) and (x3,y3) .. (x4,y4)
之间绘制了一条曲线。我无法解释它如何比 TikZ 手册中的第一个教程更好地工作,所以我引用了第 2.4 节:(x1,y1)
(x4,y4)
为此,TikZ 提供了一种特殊的语法。需要一个或两个“控制点”。它们背后的数学并不简单,但基本思想如下:假设您在点处
x
,第一个控制点是。然后曲线将开始“朝处y
的方向行进”,也就是说,曲线在 处的切线将指向。接下来,假设曲线应该在 处结束,第二个支撑点是。那么曲线确实会在 处结束,并且曲线在 处的切线将经过。y
x
x
y
z
w
z
z
w
我使用的控制点位于起点和终点右侧一个单位处。
下面的代码中还使用了另外两种语法,我之所以添加它们,是因为它们可能很有用。第一个是环境scope
,它允许您向其中的所有命令添加设置。在这里我使用了
\begin{scope}[xshift=3cm]
...
\end{scope}
毫不奇怪,这将使其中的路径坐标向右移动 3 厘米。(此时可以提到默认单位长度为 1 厘米,因此\draw (0,0) -- (0,1);
将绘制一条长度为 1 厘米的线。)
另一点是使用相对坐标。例如,如果你写下\draw (1,1) -- +(1,0) -- +(1,1);
这将从(1,1)
到(1+1,1+0) = (2,1)
画一条线(1+1,1+1) = (2,2)
。使用\draw (1,1) -- ++(1,0) -- ++(1,1);
(注意两个加号)这将从 到 画一条线(1,1)
。(1+1,1+0) = (2,1)
换句话说(2+1,1+1) = (3,2)
,使用一个加号,前一个显式坐标将始终是参考点,但使用两个加号,参考坐标将被移动。
也就是说,正如 Tom Bombadil 在评论中提到的那样,通过阅读 TikZ 手册(第 2-6 章)中的教程,您可能会学到所有这些内容,甚至更多。
\documentclass[border=4mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (0,1.5) rectangle +(1,1);
\draw [{Circle[]}-{Circle[]}] (2.5,0) -- (1.5,0) -- (1.5,1) -- (2.5,1);
\begin{scope}[xshift=3cm]
\draw [{Circle[]}-{Circle[]}] (0,0) -- ++(1,0) -- ++(0,1) -- ++(-1,0) --
++(0,1) -- ++(1,0) -- ++(0,1) -- ++(-1,0);
\draw [{Circle[]}-{Circle[]}] (2.5,0) -- (1.5,0) -- (1.5,1) --
(2.5,1) .. controls (3.5,1) and (3.5,3) .. (2.5,3) --
(1.5,3) -- (1.5,2) -- (2.5,2);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
这是一个简单的方法元帖子,这可能会帮助您入门。请点击上面的链接获取更多详细信息,以及指向可用的优秀教程和手册的指针。
prologues := 3;
outputtemplate := "%j%c.eps";
beginfig(1);
u := 1cm;
draw (0,0) -- (u,0) -- (u,u) -- (0,u) --
(0,2u) -- (u,2u) -- (u,3u) -- (0,3u);
fill fullcircle scaled 5 shifted origin;
fill fullcircle scaled 5 shifted (0,3u);
draw (2.5u,0) -- (1.5u,0) -- (1.5u,u) --
(2.5u,u) {right} .. (3.5u,2u) {up} .. {left} (2.5u,3u) --
(1.5u,3u) -- (1.5u,2u) -- (2.5u,2u);
fill fullcircle scaled 5 shifted (2.5u,0);
fill fullcircle scaled 5 shifted (2.5u,2u);
endfig;
end.