代码

代码

我正在尝试填充下面标记为灰色的区域。

在此处输入图片描述

我找到了一些使用圆来实现这种效果的例子clip。但我找不到使用圆弧来实现这种效果的方法。

\documentclass[a4paper,12pt]{article}
\usepackage{mathtools}
\usepackage{tkz-euclide}
\usepackage{tikz}
\usetikzlibrary{quotes,angles,shapes,backgrounds}
\def \firstarc{(4,0) arc (0:90:4cm)}
\def \secondarc{(8,0) arc (0:30:8cm)}
\begin{document}
\begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (8,0);
    \coordinate (C) at (8,4);
    \coordinate (D) at (0,4);

    \draw \firstarc;
    \draw \secondarc;

    \draw (A)--(B)--(C)--(D)--(A);
\end{tikzpicture}
\end{document}

答案1

这里的所有答案都很好,因为它们提供了实际区域,并且不会通过填充背景白色来作弊。(尽管这会更容易,并且在大多数情况下是一个合适的解决方案。)

但是,当矩形的高度和宽度发生变化时,这些解决方案不起作用,因为所有解决方案都以 30 度角进行硬编码。我相信您可以使用交集库缩短此代码,并且存在纯 tikz 解决方案;这是我的解决方案。

结果看起来和其他人的尝试一样。请注意,这些图像是透明的。

在此处输入图片描述

但是,正如前面提到的,也可以改变尺寸

在此处输入图片描述

在此处输入图片描述

代码

\documentclass[a4paper,12pt,margin=0.1mm]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all} % load all objects not neccecary in TexLive2020
\begin{document}
  \begin{tikzpicture}
    \def\width{8} \def\height{3}

    \tkzDefPoints{0/0/A, \width/0/B, \width/\height/C, 0/\height/D}
    \tkzClipPolygon(A,B,C,D)

    % Different waus to define the point E
    % \tkzDefPointBy[rotation= center A angle 90](D) \tkzGetPoint{E}
     \tkzDefPoint(0.5*\width, 0){E}
    % \tkzDefPoint(\height, 0){E}

    \tkzCalcLength[cm](A,E) \tkzGetLength{rAE} % \rAE gives the length

    \tkzInterLC(C,D)(A,B) \tkzGetPoints{J1}{J2}
    \tkzFindSlopeAngle(A,J2)\tkzGetAngle{JAB} % Might have to switch with J1 here

    \tkzDrawCircle(A,B); \tkzDrawCircle(A,E)

    \fill[blue] (E) arc (0:90:\rAE cm) -- (D) -- (\JAB:\width cm) 
                    arc (\JAB:0:\width cm);
    \tkzDrawPolygon[red](A,B,C,D)
  \end{tikzpicture}
\end{document}

答案2

因为您已经对arcs 使用极坐标。

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{mathtools}
\usepackage{tkz-euclide}
\usepackage{tikz}
\usetikzlibrary{quotes,angles,shapes,backgrounds}
\def \firstarc{(4,0) arc (0:90:4cm)}
\def \secondarc{(8,0) arc (0:30:8cm)}
\begin{document}
\begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (8,0);
    \coordinate (C) at (8,4);
    \coordinate (D) at (0,4);

    \draw \firstarc;
    \draw \secondarc;

    \draw[red] (A)--(B)--(C)--(D)-- cycle;
    \fill[blue] (B) -- (4,0) arc (0:90:4cm) -- (30:8cm) arc (30:0:8cm);
\end{tikzpicture}
\end{document}

答案3

@BambOo 答案的简化版本(+1):

\documentclass[a4paper,12pt]{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
\draw[red]  (0,0) rectangle (8,4);
\fill[blue] (4,0) arc (0:90:4cm) -- (30:8cm) arc (30:0:8cm);
    \end{tikzpicture}
\end{document}

结果是一样的:

在此处输入图片描述

答案4

希望这有帮助!

\documentclass[a4paper,12pt]{article}
\usepackage{mathtools}
\usepackage{tkz-euclide}
\usepackage{tikz}
\usetikzlibrary{quotes,angles,shapes,backgrounds}
\def \firstarc{(4,0) arc (0:90:4cm)}
\def \secondarc{(8,0) arc (0:30:8cm)}
\begin{document}
\begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (8,0);
    \coordinate (C) at (8,4);
    \coordinate (D) at (0,4);

    \draw \firstarc;
    \draw \secondarc;

    \draw (A)--(B)--(C)--(D)--(A);
    \fill[fill=gray](30:8cm)--(0,4) arc (90:0:4cm)--(8,0) arc (0:30:8cm)--cycle;
\end{tikzpicture}
\end{document}

相关内容