
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 - 1) 단위가 아닌 (√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
루프를 사용했으며 Schrödinger의 고양이처럼 불필요한 내부 \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)
.