如何使用 tikz 制作带有圆形的正方形?

如何使用 tikz 制作带有圆形的正方形?

我试图画一个这样的正方形
在此处输入图片描述
但我无法这样做。

这个想法是制作一个正方形,并在角落处放置 4 个圆圈,但我不知道如何使填充覆盖整个圆圈区域直至正方形的边界
在此处输入图片描述

MWE 是

\documentclass[]{beamer}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[fill=gray,thick](0,0) rectangle (4,4);
\draw (4,1)[fill=white,thick] arc (90:180:1);
\draw (1,0)[fill=white,thick] arc (0:90:1);
\draw (3,4)[fill=white,thick] arc (180:270:1);
\draw (1,4)[fill=white,thick] arc (360:270:1);
\end{tikzpicture}
\hspace{2cm}
\begin{tikzpicture}
\draw[even odd rule,fill=gray,thick](0,0) rectangle (4,4) (2,2) circle (2cm);
\end{tikzpicture}
\end{document}

答案1

我不确定你喜欢用灰色填充图片的哪个区域。像下面的图片一样?请指教!

在此处输入图片描述

\documentclass{beamer}
\usepackage{tikz}

\begin{document}
\begin{frame}
    \begin{center}
    \begin{tikzpicture}
\draw[fill=gray](0,0) rectangle (4,4);
\draw[fill=white]
        (4,1)   arc (90:180:1)  --
        (1,0)   arc (0:90:1)    --
        (0,3)   arc (270:360:1) --
        (3,4)   arc (180:270:1) -- cycle
        ;
    \end{tikzpicture}
    \end{center}
\end{frame}
\end{document}

或者你喜欢像这样有以下的反向着色?

在此处输入图片描述

\documentclass{beamer}
\usepackage{tikz}

\begin{document}
\begin{frame}
    \begin{center}
    \begin{tikzpicture}
\draw   (0,0) rectangle (4,4);
\draw[fill=gray!30]
        (4,1)   arc (90:180:1)  --
        (1,0)   arc (0:90:1)    --
        (0,3)   arc (270:360:1) --
        (3,4)   arc (180:270:1) -- cycle
        ;
    \end{tikzpicture}
    \end{center}
\end{frame}
\end{document}

答案2

对于这种图形,还有两个选项。一个使用路径,clipping而另一个将矩形绘制为节点,从而允许使用path picture命令的自动裁剪属性。

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[clip](0,0) rectangle (4,4);
\filldraw[fill=gray] (0,0) circle (1cm);
\filldraw[fill=gray] (0,4) circle (1cm);
\filldraw[fill=gray] (4,0) circle (1cm);
\filldraw[fill=gray] (4,4) circle (1cm);
\end{tikzpicture}
%
\begin{tikzpicture}
\node[draw, minimum size=4cm, fill=gray,
    path picture={\foreach \i in {north west, north east, south west, south east} 
        \filldraw[fill=white] (path picture bounding box.\i) circle (1cm);}]{};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

我知道你只是想要这个轮廓,所以让它笔直但可调整:

\documentclass[border=5pt]{standalone}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        
        \def\r{1.5} % Radius of corner circles
        \def\l{5}   % Square length
        
        \draw[orange,ultra thin] (0,0) grid (\l,\l);
        
        \draw[line width=3pt]
            (\l,\r)     arc (90:180:\r)  --
            (\r,0)      arc (0:90:\r)    --
            (0,\l-\r)   arc (270:360:\r) --
            (\l-\r,\l)  arc (180:270:\r) -- cycle
            ;
    \end{tikzpicture}
\end{document}

如果您想同时使用\r\l,您可以画出一些有趣的图形(特别是如果您选择的半径大于正方形长度的一半)。

长度=5 且半径=1.5:
v1

长度=5 且半径=3:
v2

(橙色网格仅用于查看尺寸)。

答案4

也许有人对具有可配置边数的解决方案感兴趣。

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}

  %%  Pentagon -------------------
\coordinate (o1) at (0,0);
\def\radius{1}   % Radius of corner circles
\def\side{3}      % length of sides
\def\nSides{5}  %  number of sides of the polygon

\pgfmathsetmacro\nSidesMo{\nSides-1}
\pgfmathsetmacro\ang{360/\nSides}
\draw[fill=white] (o1)  \foreach \x in {0,...,\nSidesMo}{-- ++(-\x*\ang*-1^\x:\side) } -- cycle;
\draw[fill=gray] (o1)  ++(0:\radius) \foreach \x in {0,...,\nSidesMo}{ arc (\x*\ang*-1^\x:\x*\ang*-1^\x+ 180-\ang:\radius) -- ++(\x*\ang*-1^\x+180-\ang:\side-2*\radius)} ;
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容