tikzでノード/シェイプをどのように配置すればよいですか

tikzでノード/シェイプをどのように配置すればよいですか

数学の授業では、数学の論文の書き方を学んでいます。実際、面白い授業です。意味のある英語の授業のようなものです。多面体について書いた論文では、プラトン立体が 5 つしか存在しない理由を証明し、グラフィカルな証明も示しました。グラフィカルな証明では、3 つの六角形が共通の頂点で交わる必要がありました。文書を書いている間、必要なものを見つけようとしましたが、無駄だったので「強引に」やってみたところ、十分でした。しかし、もっと良い方法があるはずです。以下の最小限の実用的な例を検討して、より良い方法を教えてください。最終論文では、直角三角形とその辺に正三角形が必要になるため、tikz の限界に挑戦する必要があります。重い tikz が待っています。

アンディ

\documentclass{article}
\usepackage{gensymb}
\usepackage{tikz}
\usetikzlibrary{angles, calc, quotes, shapes.geometric}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\node[draw, minimum size=3cm,regular polygon,regular polygon sides=6] (a) {};
\node[draw, minimum size=3cm,regular polygon,regular polygon sides=6] (b) at (0,2.6cm) {};
\node[draw, minimum size=3cm,regular polygon, regular polygon sides=6] (c) at (2.26cm,1.29cm) {};
\draw (a.corner 1) circle (1cm);
\draw (0,0) -- (a.corner 1) (0,0) -- (a.corner 6);
\draw (.33cm,0) arc (0:60:.33cm) node[right] {$60\degree$};
\end{tikzpicture}
\end{figure}
\end{document}

レンダリングすると次のようになります。微妙ではありますが、右側の六角形は積み重ねられた 2 つの六角形と完全には揃っていません。

六角形は3次元に折りたたむことができない

答え1

これはいくぶん正確です。スタンドアロンに変更したのは、単に画像を切り取る手間を省くためです。

\documentclass{standalone}
\usepackage{gensymb}
\usepackage{tikz}
\usetikzlibrary{angles, calc, quotes, shapes.geometric}
\usepackage[utf8]{inputenc}
\begin{document}
%\begin{figure}
%\centering
\begin{tikzpicture}[every node/.style={outer sep=-0pt}]
\node[draw, minimum size=3cm,regular polygon,regular polygon sides=6] (a) {};
\node[draw, minimum size=3cm,regular polygon,regular polygon sides=6,anchor=corner 5] (b) at (a.corner 1) {};
\node[draw, minimum size=3cm,regular polygon, regular polygon sides=6,anchor=corner 3] (c) at (a.corner 1) {};
\draw (a.corner 1) circle (1cm);
\draw (0,0) -- (a.corner 1) (0,0) -- (a.corner 6);
\draw (.33cm,0) arc (0:60:.33cm) node[right] {$60\degree$};
\end{tikzpicture}
%\end{figure}
\end{document}

デモ

答え2

円の中心を として、円の中心を基準にして六角形を配置する方が簡単だと思います(0,0)。そうすれば、極座標を使用して六角形を配置でき、高さなどを計算する必要がなくなります。

[これがより大きな図の一部​​である場合は、相対極座標を使用して、原点以外の点の周りに配置できます。]

  \foreach \i [count=\j] in {0,120,240} \node (h\j) [my hexagon] at (\i:15mm) {};

ループを使用しましたが、\node必要に応じて 3 つのコマンドを使用することもできます。は、my hexagon一貫性と柔軟性のある書式設定を容易にするためのスタイルです。

\tikzset{%
    my hexagon/.style={draw, minimum size=3cm, regular polygon, regular polygon sides=6},
}

すると原点にも円が描かれます。

  \draw circle (10mm);

次に、角度の線を描き、角度にマークとラベルを付けます。

ロードするライブラリ を使用しますangles。座標に という名前を付けます。コードAはデフォルトでこれらの座標を使用するので、簡単にします。 は、で描画される角度の半径です。は、 からのラベルの に対する距離です。つまり、ラベル テキストは、 、つまりからになることがあります。BCangleangle radiusangle eccentricityangle radiusB2.12mm4.2mmB

  \draw (h3.corner 6) coordinate (A) -- (h3.center) coordinate (B) -- (0,0) coordinate (C) pic ["$60\degree$", draw, angle eccentricity=2.1, font=\scriptsize, angle radius=2mm] {angle};

[円とぶつからないように角度マークを少し小さくするようにサイズを調整しましたが、もちろんこれは必要に応じて調整できます。]

すると、六角形がきれいに揃います。

より良い配置

完全なコード:

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{gensymb}
\usetikzlibrary{angles,quotes,shapes.geometric}
\usepackage[utf8]{inputenc}
\begin{document}
\tikzset{%
    my hexagon/.style={draw, minimum size=3cm, regular polygon, regular polygon sides=6},
}
\begin{tikzpicture}
  \foreach \i [count=\j] in {0,120,240} \node (h\j) [my hexagon] at (\i:15mm) {};
  \draw circle (10mm);
  \draw (h3.corner 6) coordinate (A) -- (h3.center) coordinate (B) -- (0,0) coordinate (C) pic ["$60\degree$", draw, angle eccentricity=2.1, font=\scriptsize, angle radius=2mm] {angle};
\end{tikzpicture}
\end{document}

関連情報