作图要点:
/.style
定义元素属性风格;\tkzDefLine和\tkzInterLL
计算两直线交点;\tkzDefMidPoint
定义中点
今天我们来作一个立体几何图形:正方体中取一个正六边形截面并填充颜色,如上图。
作图分析
这个图的正方体有8个顶点,加上六边形的6个顶点,共有14个顶点。如果每个点都通过给出具体坐标来定义,显然很麻烦,因为涉及到一些计算。
幸运地是,tkz-euclide
包具有自动计算坐标的功能,我们只需要通过具体坐标定义一些基础的点,其它的点,我们可以通过图形之间是位置关系,利用现成的作图命令来定义曲线的交点,线段的中点等等。
这样,我们用tkz-euclide
包作图就如同几何画板一样方便了!
今天的图形涉及到\tkzDefLine和\tkzInterLL计算两直线交点;\tkzDefMidPoint定义中点等命令。
如何做?
由于前面的推文已经详细介绍了定义点,连线,填充颜色,给点添加标签,给线段添加标记等方法,所以,今天的图形我们只详细介绍新出现命令的使用方法。
1. 预定义元素的属性风格
为了使图形具有立体感,我们采用一些作图的技巧:如用斜二测法作图,同时用灰色虚线体现被遮挡的线段,用灰色的点来表现被遮挡的点。这样,图形中的元素便呈现出了不同的风格(style)。为了后面方便使用,我们在\begin{tikzpicture}
环境命令后的中括号中对元素风格进行预定义。
顺便说一句,我们可能已经意识到作图命令中出现了三种不同的括号:圆括号,中括号,大括号,它们有显著不同的功能,笼统地说,中括号中放置图形的属性选项,例如几何对象的颜色,图形的填充颜色,线的粗细、虚实,箭头的风格等等;圆括号中通常是点的坐标;大括号里往往是标签,或者表达式。
\begin{tikzpicture}[pol/.style={fill=brown!30,opacity=0.5},seg/.style={tkzdotted,color=gray},hidden pt/.style={fill=gray!40},scale=2]
\tkzSetUpPoint[size=2]
上面定义了三种元素风格:
(1)多边形填充颜色:pol/.style
, 风格的名称可以自己取,这里取pol
是polygon
的前三个字母。/.style
告诉tikz即将定义一种风格,={fill=brown!30,opacity=0.5}
,意思是填充颜色为的褐色,透明度为0.5。等号表示将这些设置赋予一个名字叫pol的风格。
下次需要填充多边形时就用命令\tkzFillPolygon[pol](P,Q,R,S,T,U)
就可以了。这样做显然是为了使代码简洁,同时具有良好的可读性。
(2)被遮挡的线段风格:seg(segments)
风格设置为灰色、虚线。
(3)被遮挡的点的风格:hidden pt
设置为用的灰色填充该点。
其它的预设置:scale=2
表示将整个图形放大2倍。\tkzSetUpPoint[size=2]
设置点的大小为2pt。
上面提到的设置均为整体设置,所以,放在作图命令的前面。后面作图命令的中括号里的设置都是局部设置。
2. 定义基础点
%%%%%%%定义点
\tkzDefPoints{0/0/A, 2.5/0/B,1.33/0.75/D,0/2.5/E,2.5/2.5/F}
坐标和名字用/分隔,用大括号括起来这里定义了正方体正面上的四个点A,B,E,F和侧面上的点D, 容易看出正面的四点构成一个正方形的四个顶点它们的坐标分别为, D的坐标设置为,遵循了斜二测原理(但不是严格的),点的坐标值是根据作图者经验设置的,需要一定的练习就能达到自如。
3. 构建正方体其它顶点
我们以底面顶点为例说明,剩下上底面的两个顶点可以类似构建出来。
可以看作是直线和的交点。而直线是通过点且与直线平行的,直线是通过点与直线平行的。所以,我们先作两条平行线、, 再取其交点,然后把这个交点命名为。
\tkzDefLine[parallel=through D](A,B)\tkzGetPoint{I1}
\tkzDefLine[parallel=through B](A,D)\tkzGetPoint{I2}
\tkzInterLL(D,I1)(B,I2)\tkzGetPoint{C}
上面第一行画的平行线,第二行画的平行线, 第三行取两者的交点并将坐标赋予。这里体会一下{C}有点的名称的含义,©则表示的坐标。
4.构建中点
我们以上底面上线段的中点为例来讲中点的构建方法。
\tkzDefMidPoint(H,G)\tkzGetPoint{P}
第一个命令是定义的中点,实际上是计算点的坐标,第二个命令讲其坐标赋予点的名字。
按照上面的方法,我们就可以定义好图形中的14个点,然后经过连线,填充,添加标签,画出顶点等步骤,就可以做出完整的图形了。
最后我们附上本例的完整代码:
完整代码:
\begin{tikzpicture}
[pol/.style={fill=brown!30,opacity=0.5},seg/.style={tkzdotted,color=gray}
,hidden pt/.style={fill=gray!40},scale=2]
\tkzSetUpPoint[size=2]
%%%%%%%定义点
\tkzDefPoints{0/0/A, 2.5/0/B,1.33/0.75/D,0/2.5/E,2.5/2.5/F}%坐标和名字用/分隔,用大括号括起来
%%%%%%%连线
\tkzDrawPolygon(A,B,F,E)
\tkzDrawSegments[seg](A,D)
\tkzDefLine[parallel=through D](A,B)\tkzGetPoint{I1}
\tkzDefLine[parallel=through B](A,D)\tkzGetPoint{I2}
\tkzInterLL(D,I1)(B,I2)\tkzGetPoint{C}
\tkzDrawSegments(B,C)
\tkzDrawSegments[seg](D,C)
\tkzDefLine[parallel=through E](A,D)\tkzGetPoint{I3}
\tkzDefLine[parallel=through D](A,E)\tkzGetPoint{I4}
\tkzInterLL(D,I3)(E,I4)\tkzGetPoint{H}
\tkzDefLine[parallel=through F](B,C)\tkzGetPoint{I5}
\tkzDefLine[parallel=through C](B,F)\tkzGetPoint{I6}
\tkzInterLL(F,I5)(C,I6)\tkzGetPoint{G}
\tkzDrawSegments(C,G G,F G,H H,E)
\tkzDrawSegments[seg](H,D)
\tkzDefMidPoint(H,G)\tkzGetPoint{P}
\tkzDefMidPoint(G,C)\tkzGetPoint{Q}
\tkzDefMidPoint(C,B)\tkzGetPoint{R}
\tkzDefMidPoint(B,A)\tkzGetPoint{S}
\tkzDefMidPoint(A,E)\tkzGetPoint{T}
\tkzDefMidPoint(E,H)\tkzGetPoint{U}
\tkzDrawSegments[seg](P,Q R,S T,U)
\tkzDrawSegments(Q,R S,T U,P)
\tkzFillPolygon[pol](P,Q,R,S,T,U)
\tkzDrawSegments[seg](H,A A,C C,H)
\tkzLabelPoints[below](A,S,B)
\tkzLabelPoints[right](C,Q)
\tkzLabelPoints[above](G,P,H)
\tkzLabelPoints[left](E,T)
\tkzLabelPoints[above=2pt,left](U,D)
\tkzLabelPoints[below=4pt,right](R,F)
\tkzDrawPoints(A,B,C,E,F,G,H,P,Q,R,S,T,U)
\tkzDrawPoints[hidden pt](D)
\end{tikzpicture}
识别下面二维码,回复 122
,领取本文例子源码:
如果本文对您有帮助,欢迎点击“在看”,转发分享!您的支持是作者写作的动力!
【LaTeX微信交流加群:】
如果你希望交流LaTeX使用或者TikZ作图或者Beamer制作幻灯片方面的问题,请先添加作者微信:niltxz
,然后加入作者的LaTeX+TikZ+Beamer 交流微信群。