写在前面

前面介绍了一些关于基本图形, 图形的标记和交点以及循环的一些内容, 这次有了前面的知识, 就可以创建更为复杂的图形了. 下面先来介绍一个比较简单的绘图小技巧, 即根据给定点(圆心)以及圆上任意一点来绘制圆. 然后根据这个技巧来进一步绘制一些复杂的图形.

通过阅读本文, 大家应该可以绘制出下面的图形

并且由此绘制更加复杂的一些几何图形, 不过这里介绍的方法仍然比较复杂, 之后可以通过tikz-euclide包来进行快速的绘制.

给定两点长度为半径作圆(圆弧)

这是一种尺规作图中常常会用到的方法, 特别是取给定长度的圆弧时候尤其如此, 下面来看看在tikz中进行绘制的基本语法

\path [name path=o1]
let \p1=($ (A) - (B) $), \n1={veclen(\x1, \y1)}
in (O) circle (\n1);

上面这段代码的意思是:

  1. 标记一个圆o1;
  2. AB两点形成的向量, 记为\p1;
  3. 利用tikz引擎的veclen函数计算AB的长度, 并记为\n1;
  4. 标记(不绘制)以O为圆心, AB长度为半径的圆.

通过这段代码, 就可以方便地绘制由两点给出的长度为半径, 以给定点为圆心的圆了.

同样地, 如果需要绘制圆弧, 只需要修改最后一行代码即可以实现, 示例如下

\path [name path=o1]
let \p1=($ (A) - (B) $), \n1={veclen(\x1, \y1)}
in (O) arc (0:90:1);

这里使用的主函数还是\path, 所以并不会进行绘制, 如果需要绘制, 那就可以通过添加[draw]参数, 或者直接使用\draw函数来完成.

一个简单的例子: 绘制正五边形的尺规作图画法

效果图:

代码以及注释如下: 详细的绘制步骤可以看我之前的文章TikZ绘图示例——尺规作图: 圆内接正五边形的近似画法_zorchp-CSDN博客_尺规作图作圆内接正五边形.

\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{intersections,through}\begin{document}\begin{tikzpicture}[]% AB, CD为圆的垂直中心线\coordinate [label=below left:$A$] (A) at (0,0);\coordinate [label=below right:$B$] (B) at (4,0);\coordinate [label=above left:$C$] (C) at (2,2);\coordinate [label=below right:$D$] (D) at (2,-2);\coordinate [label=below right:$O$] (O) at (2,0);\draw [name path=o] (O) circle (2);\draw [densely dashed,-latex,name path=AB] ($(A)!-.1!(B)$) -- ($(A)!1.1!(B)$);\draw [densely dashed,latex-,name path=CD] ($(C)!-.1!(D)$) -- ($(C)!1.1!(D)$);\coordinate [label=below:$H$] (H) at ($(O)!.5!(B)$);% 标记弧段\path [name path=o1] let \p1=($ (H) - (C) $), \n2={veclen(\x1, \y1)}in (H) circle (\n2);% 找到交点G\path [name intersections={of=o1 and AB}] coordinate [label=below right:$G$] (G) at (intersection-1);\draw (G) -- (C);\draw [-latex] (H) -- ($(H)!1.18!($(C)!.5!(G)$)$);% 绘制弧段\draw [red]let \p1=($ (H) - (C) $), \n2={veclen(\x1, \y1)}in (G) arc (180:110:\n2)(G) arc (180:185:\n2);% 找到其他点\path [name path=o2]let\p2=($ (G) - (C) $),\n2={veclen(\x2,\y2)}in (C) circle (\n2);\path [name intersections={of=o2 and o}]coordinate [label=above left:$E$] (E) at (intersection-1);\path [name path=o3]let\p2=($ (G) - (C) $),\n2={veclen(\x2,\y2)}in (E) circle (\n2);\path [name intersections={of=o3 and o}]coordinate [] (F) at (intersection-2);\path [name path=o4]let\p2=($ (G) - (C) $),\n2={veclen(\x2,\y2)}in (F) circle (\n2);\path [name intersections={of=o4 and o}]coordinate [] (J) at (intersection-2);\path [name path=o5]let\p2=($ (G) - (C) $),\n2={veclen(\x2,\y2)}in (J) circle (\n2);\path [name intersections={of=o5 and o}]coordinate [] (K) at (intersection-1);% 绘制正五边形\draw [thick] (C) -- (E) -- (F) -- (J) -- (K) -- cycle;\end{tikzpicture}
\end{document}

这里面需要注意的点有以下几个:

  1. 两弧段(通过标记圆来完成)交点需要注意是第一个交点还是第二个交点;
  2. 绘制圆弧时候需要注意初始角度, 以及圆弧参数的细微调整;
  3. 起适当的别名, 防止画到最后部件变多引起混乱.

TikZ学习笔记(四)圆的进一步探索与复杂几何图形相关推荐

  1. 【http学习笔记四】安全篇

    [http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...

  2. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  5. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  6. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  7. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  8. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  9. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

    arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...

最新文章

  1. 费马大定理:三百年数学圣杯的角逐
  2. 起底软银帝国:芯片、机器人、棒球队无所不投
  3. 如何从一个表中选择另一个表中不存在的所有记录?
  4. 类型后面的问号的目的是什么(例如:int?myVariable)?
  5. 一个实际的sonar代码检查的配置文件
  6. HTML+CSS+JS实现 ❤️ 团队人物图片蜂巢布局❤️
  7. (转)Java atomic原子类的使用方法和原理(一)
  8. 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门(TI达芬奇双核开发资料 [
  9. mysql date max_mysql – 每个ID的SELECT MAX DATE
  10. Adobe AIR * 设置移动应用程序属性
  11. ArcSDE常用操作命令
  12. js中对datagrid ,repeater的checkbox进行全选反选
  13. linux驱动开发(一):一个最简单的内核驱动程序
  14. java中parser_JavaParser:Java代码生成
  15. 合并报表excel自动模板_自动合并
  16. Selenium 2入门
  17. 5.ViewPage2使用及坑点解决
  18. 腐蚀rust服务器系统,腐蚀rust有哪些服务器命令 腐蚀rust服务器命令一览
  19. CentOS 6.4 电信ADSL拨号上网网络配置
  20. Discuz deleterow函数解析

热门文章

  1. 剑指offer 第1题
  2. 如何dos中查看当前MySQL版本信息?
  3. 一个REST风格的URI设计方案[Blog Web Services]
  4. CCF201604-2 俄罗斯方块
  5. C语言课后习题(3)
  6. PAT乙级(1016 部分A+B)
  7. 基础知识—函数-函数概述
  8. java制作头像框_头像框?搬空商店?活动还有二期?春活相关问题答疑
  9. vue路由跳转动画_Vue路由跳转动画
  10. 手绘流程图讲解spark是如何实现集群的高可用