写在前面

上节(TikZ学习笔记(一) 基本图形_zorchp-CSDN博客)我们说到TikZ\text{Ti}k\text{Z}TikZ的简单图形绘制方法, 这次我们来学习一下有关图形中循环语句(foreach...in...)的使用, 有了这个强有力的工具, 我们就能通过TikZ\text{Ti}k\text{Z}TikZ方便又快捷地生成很多精致的矢量图了.

P.S. 这里针对不同的图形种类, 很多大佬已经封装了一些好用的宏包, 例如平面几何绘图包tikz-euclide, 用这个包来绘制平面几何的常用图形比起直接使用TikZ\text{Ti}k\text{Z}TikZ要简单很多, 不过这里还是建议先研究一下TikZ\text{Ti}k\text{Z}TikZ, 因为其他这些包都是基于TikZ\text{Ti}k\text{Z}TikZ​二次开发的, 这也算简单了解一下"所以然"了.

预备知识

在介绍循环之前, 我们先来介绍一下一些基本的绘图知识点, 这些也十分重要, 特别是用在下面的例子中时.

线段的等分

这里先介绍TikZ\text{Ti}k\text{Z}TikZ​的一个子包calc, 需要在导言区(preamble)加入\usetikzlibrary{calc}, 就能使用线段等分的命令了.

默认的调用格式是($(线段起始点)!<比例>!(线段终止点)$) , 还是很好理解的. 例如下面的语句就是将线段AB进行等分, 分点取D.

\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{calc}\begin{document}\begin{tikzpicture}[]% 标记点A, B, C\coordinate[label=left:{$A$}] (A) at (0,2);\coordinate[label=right:{$B$}] (B) at (5,2);% 绘制线段AB\draw (A) -- (B);% 线段等分, 中间的参数可选0~1之间的数, 这里取`.5`\coordinate[label=below:{$D$}] (D) at ($(A)!.5!(B)$);% 使用红色的圆形填充D点\filldraw[red] (D) circle (1pt);\end{tikzpicture}
\end{document}

同样, 如果需要取AD的分点, 可以加上下面的两条命令:

\coordinate[label=below:{$E$}] (E) at ($(A)!.25!(B)$);
\filldraw[green] (E) circle (1pt);

循环(pgfmanual-chap88)

目前十分流行的矢量图绘制软件Adobe illustrator(AI), 能够实现直接用鼠标来创建矢量图, 但是当遇到大量重复工作时, TikZ\text{Ti}k\text{Z}TikZ中的foreach语句就能很好地发挥其威力, 下面用一个小例子来说明, 这个例子就是我之前学习TikZ\text{Ti}k\text{Z}TikZ​时候绘制的尺规作图系列第一幅图, TikZ绘图示例——尺规作图:线段的任意等分_zorchp-CSDN博客.

对于循环, 这里我们先介绍其主要格式, 即

\foreach \i in {...}
{...
}

对第一处省略号, 可以采用如下的方式来定义, 即起始值,第二值,...,结束值,(第二值可以不写, 默认为1) 相当于C++中的for循环语句的定义, 都是需要三个参数来实现循环变量的生成.

下面是一些由\foreach生成的值, 在pgfmanual中都有, 可以加深大家对\foreach的理解.

\foreach \x in {1,2,...,6} {\x, } yields 1, 2, 3, 4, 5, 6,
\foreach \x in {1,2,3,...,6} {\x, } yields 1, 2, 3, 4, 5, 6,
\foreach \x in {1,3,...,11} {\x, } yields 1, 3, 5, 7, 9, 11,
\foreach \x in {1,3,...,10} {\x, } yields 1, 3, 5, 7, 9,
\foreach \x in {0,0.1,...,0.5} {\x, } yields 0, 0.1, 0.20001, 0.30002, 0.40002,
\foreach \x in {a,b,9,8,...,1,2,2.125,...,2.5} {\x, } yields a, b, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 2.125, 2.25, 2.375, 2.5,\foreach \x in {1,...,6} {\x, } yields 1, 2, 3, 4, 5, 6,
\foreach \x in {9,...,3.5} {\x, } yields 9, 8, 7, 6, 5, 4,\foreach \x in {a,...,m} {\x, } yields a, b, c, d, e, f, g, h, i, j, k, l, m,
\foreach \x in {Z,X,...,M} {\x, } yields Z, X, V, T, R, P, N,\foreach \x in {2^1,2^...,2^7} {$\x$, } yields 21, 22, 23, 24, 25, 26, 27,
\foreach \x in {0\pi,0.5\pi,...\pi,3\pi} {$\x$, } yields 0π, 0.5π, 1π, 1.5π, 2π, 2.5π, 3π,
\foreach \x in {A_1,..._1,H_1} {$\x$, } yields A1, B1, C1, D1, E1, F1, G1, H1,

下面是一个小例子, 用于绘制一个坐标轴.

\documentclass[tikz,border=3pt]{standalone}\begin{document}\begin{tikzpicture}% 绘制网格\draw[gray!50, thin] (-2,-2) grid (10,10);% 绘制箭头\draw[-latex] (-3,0) -- (11,0);\draw[-latex] (0,-3) -- (0,11);% 标记点以及label\coordinate [label=below:$x$] (x) at (11,0);\coordinate [label=right:$y$] (y) at (0,11);\coordinate [label=below left:$O$] (O) at (0,0);% 开始绘制刻度\foreach \i in {1,...,10} {% 标记刻度: label来定制字体颜色\coordinate [label={[red] below right:$\i$}] (x\i) at (\i-.1,0);\coordinate [label={[green] below left:$\i$}] (y\i) at (0,\i+.1);% 使用小椭圆填充\filldraw (\i,0) ellipse (.5pt and 1pt);\filldraw (0,\i) ellipse (1pt and .5pt);}\end{tikzpicture}
\end{document}

一个例子

下面以尺规作图系列中最简单的一幅图为例进行讲解.

\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{calc}\begin{document}\begin{tikzpicture}[]% 标记点A, B, C\coordinate[label=left:{$A$}] (A) at (0,2);\coordinate[label=right:{$B$}] (B) at (5,2);\coordinate[label=below right:{$C$}] (C) at (5,0);% 绘制线段AB, AC\draw (A) -- (B);\draw (A) -- (C);% 等分线段AC\foreach \i in {1,...,5}{\coordinate[label=below:{$\i'$}] (a\i) at ($(A)!\i/5!(4.5,.2)$);\coordinate[label=above:{$\i$}] (b\i) at ($(A)!\i/5!(B)$);\draw (a\i) -- (b\i);}\end{tikzpicture}
\end{document}

TikZ学习笔记(二)循环相关推荐

  1. python学习笔记二— 循环

    程序结构 •三种结构◾顺序 ◾循环 ◾分支 分支结构 •分支结构基本语法◾if (如果) 条件表达式: ◾语句1 ◾语句2 ◾语句3 ◾- •条件表达式就是计算机结果必须为 布尔值 的表达式 •表达式 ...

  2. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  3. Python学习笔记——for循环和range函数

    Python学习笔记--for循环和range函数 Python的for循环 for 目标 in 表达式 :循环体 案例一 >>> example = 'abcdef' >&g ...

  4. 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现

    深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...

  5. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  6. python学习笔记(二) 基本运算

    python学习笔记(二) 基本运算 1. 条件运算 基本语法 if condition1: do somethings1elif condition2: do somethings2else: do ...

  7. Netty学习笔记二网络编程

    Netty学习笔记二 二. 网络编程 1. 阻塞模式 阻塞主要表现为: 连接时阻塞 读取数据时阻塞 缺点: 阻塞单线程在没有连接时会阻塞等待连接的到达,连接到了以后,要进行读取数据,如果没有数据,还要 ...

  8. wxpython应用程序对象与顶级窗口_wxPython学习笔记(二)

    如何创建和使用一个应用程序对象? 任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.应用程序对象的主要目的是管理幕后的主事件循环. 父类 ...

  9. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

最新文章

  1. Lession 15 Good news
  2. Forbid consumer 192.168.85.1 access service com.sharearn.dubbo.romote.TestService from registry
  3. mysql5.7修改连接数_Mysql 5.7 centos 7.2 修改最大连接数 无效 2018-03-08
  4. 深度学习核心技术精讲100篇(十一)-Google利器超强特征提取网络(Transformer)
  5. java tomcat自动安装教程_Tomcat:基础安装和使用教程
  6. linux 系统错误表 和对应的数值
  7. git 32位_完整的GIT笔记 快速上手小白教程
  8. 疑似OPPO Reno6系列新机通过工信部认证:配备6.43英寸屏 机身仅7.9mm
  9. java 数字的进制转换
  10. uni-app调用百度OCR身份证识别的api,实现身份证文字识别
  11. Python:体脂计算
  12. 1959年第一台电子计算机,1、 一般认为,世界上第一台电子数字计算机诞生于______。 A.1946年 B.1952年 C.1959年 D.1962年...
  13. EasyPoi Excel简单导出导入
  14. 原神梦里花花种在哪种
  15. 深夜报社哪家强?我分析了大众点评20w家店告诉你!
  16. 洛谷 U5750 疯暴英雄
  17. □ 影片名:《樱桃小丸子》(36004) 在线播放
  18. 整理程序员常用英语单词1695个
  19. loadrunner的使用步骤(一)
  20. [BBS 水木清华站]给Linux新手

热门文章

  1. 数据结构----出栈顺序有效性的判断
  2. 20165208 课下作业
  3. 显示数据库的所有表名,字段名,库名
  4. NCrawler爬取中文网页时乱码问题的解决方法
  5. leetcode 1185 python
  6. 问题通用解决方法探索
  7. php 编译 iconv错误,php编译错误:configure: error: Please reinstall the iconv library.
  8. CCF201604-2 俄罗斯方块
  9. 北大OJ(POJ 2503)在线翻译
  10. SQL必知必会-检索数据