Tikz 绘制由 x 轴和水平线包围的圆的部分

Tikz 绘制由 x 轴和水平线包围的圆的部分

我是 tikz 新手,我想绘制以下阴影区域,该区域由直线 y = 1、x 轴和 x^2 + y^2 <= 2 定义的圆包围。下图描绘了所需的结果。我该怎么做?

我想要的 Tikz

答案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代替并不是绝对必要的。)\drawfill=<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}

相关内容