使用 TikZ 切圓

使用 TikZ 切圓

我正在嘗試使用 TikZ 繪製矩形中包含的切圓,但遇到了一些困難。我還徵求有關更好地使用 TikZ 的一般回饋,因此我在這裡提供了有關我的方法的大量詳細資訊。

我首先使用 製作外部矩形\draw (0,0) -- ++(0,-6) -- ++(10,0) -- ++(0,6) -- cycle;。然後我用 製作了第一行圓圈\tikz\foreach \x in {0,2,4,6} \draw (\x,0) circle (1);。我注意到圓圈被放置在矩形的頂線上,所以我假設座標(\x,0)底部每個圓的,而不是中心正如我所預料的那樣(儘管即使它們是為了中心,我仍然需要將它們移除)。我將矩形的第一個座標更改為,(0,3)因為我還想在圓圈之前插入插圖。但隨後這幅畫侵占了它上面的文字。我將第一個座標更改回(0,0),並將圓的座標調整為(\x,-3)。但隨後圓圈又回到了矩形上方,整個繪圖在頁面上大幅移動。為什麼會發生這種情況?

我將圓形的座標更改回(\x,0),將矩形的座標更改回(0,3)。然後我嘗試製作第二排圓圈。因為我希望將它們包裝在六角形格子中,所以我寫了foreach \x in {1,3,5,7 \draw (\x,{-sqrt(3)}) circle (1);,我想法將產生另外四個圓圈,第一行右側有一個單位,下方有√3個單位。相反,它們與第一行水平排列,並且比我想要的要遠一些。我將座標重寫為 (\x+1,{-sqrt(3)+1}),這有效,但為什麼呢?我猜這意味著\x座標中的一定是相對的到它在系列中的位置{1,3,5,7},所以我預計將系列與 互換{0,2,4,6}會得到相同的結果,但不,事實並非如此。垂直位置由座標中的固定值給出,我知道第二行圓應該比第一行圓低 √3 個單位,而不是低於 (√3 - 1) 個單位。我究竟做錯了什麼?

最終,我想繪製第三行圓,標記每個圓的中心,讓矩形的邊緣夾住懸垂的半圓,並為半徑和其他內容添加一些註釋,所以我也想知道這些步驟是否會如果我將圓圈作為節點或其他東西,就會更短。我已經花了很多時間瀏覽 TikZ 手冊。我看到了一些可能的解決方案,例如使用intersections圖書館或tangent來自calc圖書館,但我不確定如何我會用它們。由於手冊超過 1,300 頁,對於 TikZ 新手來說,尋找特定問題的答案可能很困難。我還檢查了 Stack Exchange 上的答案,但仍然不知道該怎麼做。


我的程式碼

\documentclass[12pt]{article}
\usepackage[margin=1.25in]{geometry}
\usepackage{amsmath,amsfonts,amsthm,amssymb}
\usepackage{pgf,tikz}
\usetikzlibrary{calc,intersections}

\begin{document}
    \begin{flushleft}   

        \begin{figure}[h]
            \begin{tikzpicture}
                \draw (0,3) -- ++(0,-6) -- ++(10,0) -- ++(0,6) -- cycle;
                \tikz\foreach \x in {0,2,4,6}
                    \draw (\x,0) circle (1);
                \foreach \x in {1,3,5,7}
                    \draw (\x+1,{-sqrt(3)+1}) circle (1);
            \end{tikzpicture}
        \end{figure}

    \end{flushleft}
\end{document}

輸出

輸出

答案1

您的數學是正確的,但是透過使用\tikz\foreach您的嵌套tikzpicture,這解釋了不一致的情況。

這將繪製第三行並固定其他圓圈的位置。對於矩形,您可以僅使用rectangle路徑構造。

\documentclass[12pt]{article}
\usepackage[margin=1.25in]{geometry}
\usepackage{tikz}

\begin{document}
\begin{figure}[h]
    \begin{tikzpicture}
        \draw (0,3) rectangle ++(10,-6);
        \draw foreach \x in {0,2,4,6}
             {(1+\x,2) circle[radius=1]
             (1+\x,{2-2*sqrt(3)}) circle[radius=1]};
        \draw foreach \x in {1,3,5,7}
            {(\x+1,{-sqrt(3)+2}) circle[radius=1]};
    \end{tikzpicture}
\end{figure}
\end{document}

在此輸入影像描述

這會添加更多的圓圈,標記中心並將圓圈夾在矩形上。

\documentclass[12pt]{article}
\usepackage[margin=1.25in]{geometry}
\usepackage{tikz}

\begin{document}
\begin{figure}[h]
    \begin{tikzpicture}[bullet/.style={fill,circle,inner sep=1.2pt}]
        \draw[clip] (0,3) rectangle ++(10,-6);
        \draw foreach \X in {-1,0,...,9}
         {\ifodd\X
           (\X+1,{-sqrt(3)+2})  node[bullet]{} circle[radius=1]
            (\X+1,{-3*sqrt(3)+2})  node[bullet]{} circle[radius=1]
         \else 
             (\X+1,2) node[bullet]{} circle[radius=1]
             (\X+1,{2-2*sqrt(3)})  node[bullet]{} circle[radius=1]
         \fi};
    \end{tikzpicture}
\end{figure}
\end{document}

在此輸入影像描述

答案2

這是你想要的?

在此輸入影像描述

您可以使用\clip[draw]繪製一個矩形並剪輯到該矩形。除此之外,我使用了兩個\foreach循環,並且像薛定諤的貓一樣,刪除了無關的內部\tikz.

\documentclass[12pt]{article}
\usepackage[margin=1.25in]{geometry}
\usepackage{amsmath,amsfonts,amsthm,amssymb}
\usepackage{pgf,tikz}
\usetikzlibrary{calc,intersections}

\begin{document}
    \begin{flushleft}

        \begin{figure}[h]
            \begin{tikzpicture}
                \pgfmathsetmacro\top{2+2*sqrt(3)}
                \clip[draw](0,0) rectangle (10,\top);
                \foreach \x in {1,3,5,7,9} {
                  \foreach \row [
                      evaluate=\row as \yrow using {1+sqrt(3)*\row},
                      evaluate=\row as \xrow using {isodd(\row) ? \x+1: \x}
                    ] in {0,1,2} {
                        \draw (\xrow,\yrow) circle (1);
                  }
                }
            \end{tikzpicture}
        \end{figure}

    \end{flushleft}
\end{document}

我還曾經\pgfmathsetmarco將矩形的高度設定為2+2\sqrt(3)

相關內容