
我正在嘗試使用 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)
。