答案1
总的来说,我建议遵循 Tobi 的建议,但这很简单,所以我还是会回答。我还要注意的是,如果你还没有看过文章开头的教程,TikZ 手册,我建议你这样做。第一章(第 2 章)将教你制作此类图表所需的一切。
我猜画轴应该不成问题,那只是两条直线。
对于截断圆,它由两个圆弧和两条直线组成。要绘制圆弧,您可以使用
arc[start angle=<degrees>, end angle=<degrees>, radius=<length>]
这将逆时针绘制从start angle
到 的圆的一部分end angle
。(您也可以执行arc[start angle=<degrees>, delta angle=<degrees>, radius=<length>]
,其中delta angle
表示弧长(以度为单位)。)
假设你开始在圆的最右边绘制。你知道那是在(2,0)
,所以你从
\draw (2,0) ...
您想在此点下方添加一个标签,虽然可以稍后添加,但在这种情况下同时添加可能同样方便。使用以下方式添加文本node [<options>] {<text>}
:
\draw (2,0) node[below] {2} ...
(如果单独添加节点,可以执行\node [<options>] at (<coordinate>) {<text>};
。)
从那里开始,您要绘制一个覆盖 30 度的圆弧(因为 sin(30) = 0.5),从零角度开始。按照上面所说的:
\draw (2,0) node[below] {2}
arc[start angle=0, end angle=30, radius=2] node[right] {1}...
我还在该弧的端点右侧添加了一个标签。
下一步是绘制一条直线到左圆弧的起始位置。虽然您可以手动或直接在坐标系中计算 x/y 坐标,但使用极坐标更为方便,极坐标的指定方式如下(<angle> : <radius>)
:
\draw (2,0) node[below] {2}
arc[start angle=0, end angle=30, radius=2] node[right] {1}
-- (150:2) ...
现在您只需绘制第二条弧线,添加一个node
作为标签,最后再绘制一条直线回到起点。绘制封闭路径时,无需重复第一个坐标,而是使用cycle
:
\draw (2,0) node[below] {2}
arc[start angle=0, end angle=30, radius=2] node[right] {1}
-- (150:2)
arc[start angle=150, end angle=180, radius=2] node[below] {2}
-- cycle;
\draw
单独使用只会给出一条黑线,但您可以指定颜色并填充选项:
\filldraw [
fill=brown!80!black,
draw=red,
very thick
]
(2,0) node[below] {2}
arc[start angle=0, end angle=30, radius=2] node[right] {1}
-- (150:2)
arc[start angle=150, end angle=180, radius=2] node[below] {2}
-- cycle;
(在这种情况下同时指定和时,使用\filldraw
代替并不是绝对必要的。)\draw
fill=<color>
draw=<color>
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path [
fill=brown!80!black,
draw=red,
very thick
]
(2,0) node[below] {2}
arc[start angle=0, end angle=30, radius=2] node[right] {1}
-- (150:2)
arc[start angle=150, end angle=180, radius=2] node[below] {2}
-- cycle;
\draw [thick] (-3,0) -- (3,0);
\draw [thick] (0,-2) -- (0,2);
\end{tikzpicture}
\end{document}
答案2
添加了 tkz-euclide 的答案
\documentclass{article} % or another class
\usepackage{xcolor} % before tikz or tkz-euclide if necessary
\usepackage{tkz-euclide} % no need to load TikZ
\usetikzlibrary{babel} %if there are problems with the active characters
\begin{document}
\begin{tikzpicture}
%define the origin O -- radius A
\tkzDefPoint(0,0){O}
\tkzDefPoint(1.41,0){A}
\tkzDrawPoints(O,A)
\tkzLabelPoints[below](O,A)
%draw the semicircle
\tkzDefPointBy[rotation= center O angle 180](A)
\tkzGetPoint{B}
\tkzDrawArc[line width=0.1pt, white](O,A)(B)
\tkzLabelPoints[below](B)
%draw the line at y=1
\tkzDefPoint(1,0){A'}
\tkzDefPoint(-1,0){B'}
\tkzDefShiftPoint[A'](90:1){A''}
\tkzDefShiftPoint[B'](90:1){B''}
\tkzDrawSegment[red,line width=1pt](A'',B'')
%draw the arc perimeter line
\tkzDrawArc[red,line width=1pt](O,A)(A'')
\tkzDrawArc[red,line width=1pt](O,B'')(B)
%color the fill inside
\fill[red!40] (-1,0) rectangle (1,1);
\tkzFillSector[rotate,color=red!40](O,A)(45)
\tkzFillSector[rotate,color=red!40](O,B)(-45)
%draw the center axis -horizontal and vertical
\tkzDrawLine(A,B)
\tkzDefLine[orthogonal =through O](B,A)\tkzGetPoint{X}
\tkzDrawLine(O,X)
\end{tikzpicture}
\end{document}