TikZ学习笔记(四)圆的进一步探索与复杂几何图形
写在前面
前面介绍了一些关于基本图形, 图形的标记和交点以及循环的一些内容, 这次有了前面的知识, 就可以创建更为复杂的图形了. 下面先来介绍一个比较简单的绘图小技巧, 即根据给定点(圆心)以及圆上任意一点来绘制圆. 然后根据这个技巧来进一步绘制一些复杂的图形.
通过阅读本文, 大家应该可以绘制出下面的图形
并且由此绘制更加复杂的一些几何图形, 不过这里介绍的方法仍然比较复杂, 之后可以通过tikz-euclide
包来进行快速的绘制.
给定两点长度为半径作圆(圆弧)
这是一种尺规作图中常常会用到的方法, 特别是取给定长度的圆弧时候尤其如此, 下面来看看在tikz中进行绘制的基本语法
\path [name path=o1]
let \p1=($ (A) - (B) $), \n1={veclen(\x1, \y1)}
in (O) circle (\n1);
上面这段代码的意思是:
- 标记一个圆
o1
; - 取
A
与B
两点形成的向量, 记为\p1
; - 利用tikz引擎的
veclen
函数计算AB
的长度, 并记为\n1
; - 标记(不绘制)以
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}
这里面需要注意的点有以下几个:
- 两弧段(通过标记圆来完成)交点需要注意是第一个交点还是第二个交点;
- 绘制圆弧时候需要注意初始角度, 以及圆弧参数的细微调整;
- 起适当的别名, 防止画到最后部件变多引起混乱.
TikZ学习笔记(四)圆的进一步探索与复杂几何图形相关推荐
- 【http学习笔记四】安全篇
[http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)
RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- Ethernet/IP 学习笔记四
Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...
- OpenCV学习笔记四-image的一些整体操作
title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...
- 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...
最新文章
- 费马大定理:三百年数学圣杯的角逐
- 起底软银帝国:芯片、机器人、棒球队无所不投
- 如何从一个表中选择另一个表中不存在的所有记录?
- 类型后面的问号的目的是什么(例如:int?myVariable)?
- 一个实际的sonar代码检查的配置文件
- HTML+CSS+JS实现 ❤️ 团队人物图片蜂巢布局❤️
- (转)Java atomic原子类的使用方法和原理(一)
- 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门(TI达芬奇双核开发资料 [
- mysql date max_mysql – 每个ID的SELECT MAX DATE
- Adobe AIR * 设置移动应用程序属性
- ArcSDE常用操作命令
- js中对datagrid ,repeater的checkbox进行全选反选
- linux驱动开发(一):一个最简单的内核驱动程序
- java中parser_JavaParser:Java代码生成
- 合并报表excel自动模板_自动合并
- Selenium 2入门
- 5.ViewPage2使用及坑点解决
- 腐蚀rust服务器系统,腐蚀rust有哪些服务器命令 腐蚀rust服务器命令一览
- CentOS 6.4 电信ADSL拨号上网网络配置
- Discuz deleterow函数解析