この図では、平面の線を分割する線の領域に番号を付けたいです。
1本の線で2つの領域、2本の線で4つの領域があります。
\documentclass[tikz,12pt]{standalone}
\begin{document}
\begin{tikzpicture}
\path
(0,0) coordinate (O)
(-2,-2) coordinate (A)
(2,2) coordinate (B)
(2,-2) coordinate (C)
(-2,2) coordinate (D);
\node at (barycentric cs:A=1,C=1,B=1) {$1$};
\node at (barycentric cs:A=1,D=1,B=1) {$2$};
\draw (A) -- (B);
\end{tikzpicture}
\begin{tikzpicture}
\path
(0,0) coordinate (O)
(-2,-2) coordinate (A)
(2,2) coordinate (B)
(-4,-2) coordinate (C)
(4,2) coordinate (D);
\draw (A) -- (B) (C) -- (D);
\node at (barycentric cs:A=1,O=1,C=1) {$1$};
\node at (barycentric cs:B=1,O=1,C=1) {$2$};
\node at (barycentric cs:B=1,O=1,D=1) {$3$};
\node at (barycentric cs:A=1,O=1,D=1) {$4$};
\end{tikzpicture}
\end{document}
最大の数 $ L_n $ は $ \dfrac{n^2+n+2}{2} $ であることはわかっています。この図を自動的に描画するにはどうすればよいですか?この図に数字を自動的に追加するにはどうすればよいですか?
答え1
これは完全な答えからは程遠いです。問題は、n
線の数が与えられた場合、領域数が最大数に達するように線をどのように配置するかということです(n^2+n+2)/2
。次の条件が必要であると私は考えています。
- 2 つの異なる線は平行ではありません。
- 特定の交差点では 2 本以上の線が交差することはありません。
これらのガイドラインを使用すると、そのような配置を作成する画像を作成できます。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/divi/.style={code={
\foreach \X [evaluate=\X as \Y using {360*\X/(#1+1-isodd(#1))}]
in {1,...,#1}
\draw[scale=1/#1] ({90+\Y}:#1/4)
++ ({180+\Y}:1+1.5*#1) -- ++ ({\Y}:2+3*#1);
}}]
\matrix {\pic {divi=1}; & \pic {divi=2}; \\
\pic {divi=3}; & \pic {divi=4}; \\
\pic {divi=5}; & \pic {divi=6}; \\
};
\end{tikzpicture}
\end{document}
数字を入力しようともしていません。
答え2
これは三角形の内心を計算するマクロを提供します。難しいのは浮動小数点のオーバーフローを回避することです。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\incenter}[4]% #1-#3 = coordinate names for vertices, #4 = name of incenter
{\pgfscope
\pgfpathmoveto{\pgfpointanchor{#1}{center}}%
\pgfgetlastxy{\xa}{\ya}%
\pgfpathmoveto{\pgfpointanchor{#2}{center}}%
\pgfgetlastxy{\xb}{\yb}%
\pgfpathmoveto{\pgfpointanchor{#3}{center}}%
\pgfgetlastxy{\xc}{\yc}%
\pgfmathsetmacro{\a}{veclen(\xc-\xb,\yc-\yb)}%
\pgfmathsetmacro{\b}{veclen(\xc-\xa,\yc-\ya)}%
\pgfmathsetmacro{\c}{veclen(\xb-\xa,\yb-\ya)}%
\pgfmathsetmacro{\d}{\a+\b+\c}%
\pgfmathsetmacro{\a}{\a/\d}%
\pgfmathsetmacro{\b}{\b/\d}%
\pgfmathsetmacro{\c}{\c/\d}%
\pgfmathsetlengthmacro{\xo}{\a*\xa + \b*\xb + \c*\xc}%
\pgfmathsetlengthmacro{\yo}{\a*\ya + \b*\yb + \c*\yc}%
\pgfcoordinate{#4}{\pgfpoint{\xo}{\yo}}
\endpgfscope}
\begin{document}
\begin{tikzpicture}
\path
(0,0) coordinate (O)
(-2,-2) coordinate (A)
(2,2) coordinate (B)
(2,-2) coordinate (C)
(-2,2) coordinate (D);
\draw (A) -- (B);
\incenter{A}{C}{B}{O1}%
\node at (O1) {1};
\incenter{A}{D}{B}{O2}%
\node at (O2) {2};
\end{tikzpicture}
\begin{tikzpicture}
\path
(0,0) coordinate (O)
(-2,-2) coordinate (A)
(2,2) coordinate (B)
(-4,-2) coordinate (C)
(4,2) coordinate (D);
\draw (A) -- (B) (C) -- (D);
\incenter{A}{O}{C}{O1}%
\node at (O1) {1};
\incenter{B}{O}{C}{O2}%
\node at (O2) {2};
\incenter{B}{O}{D}{O3}%
\node at (O3) {3};
\incenter{A}{O}{D}{O4}%
\node at (O4) {4};
\end{tikzpicture}
\end{document}
答え3
これらの図を描くのは簡単です。以下のコードはマクロを定義している\DividedPlanes
ので、
\DividedPlanes{5}
\DividedPlanes{6}
それぞれ 5 ポイントと 6 ポイントに対して次の構成を生成します。
の線は、\DividedPlanes{<n>}
最初にループを使用して、 の点 における半径 の円の周囲に座標\foreach
を配置することによって描画されます。その後、 のすべての数値ペア (つまり、点) をループすることによって線が描画されます。現時点では時間がありませんが (今日は仕事の日です)、もっと考えれば、領域にラベルを付けることが可能になるはずです ( が奇数の場合と偶数の場合では動作が若干異なります)。地元のネコ科動物が私に先を越さなければ、これに戻ってくるかもしれません。n
2
2k\pi/n
k=1,2,...,n
{1,2,...,n}
n
コードは次のとおりです:
\documentclass{article}
\usepackage{tikz}
% allow an optional argument so that we can pass some optional
% style commands to the tikzpicture environment
% usage: \DividedPlanes[style]{n}
\newcommand\DividedPlanes[2][]{
\begin{tikzpicture}[#1]
% reserve some real estate for the image
\draw[white](-3,-3) rectangle (3,3);
\foreach \pt in {1,...,#2} {
% name coordinates (1), (2), ..., (#2)
\coordinate (\pt) at (\pt*360/#2:2);
}
\foreach \apt in {1,...,#2} {
\foreach \bpt in {1,...,#2} {
\ifnum\apt=\bpt\else
% draw a line when a and b are distinct
\draw[shorten >=-20,shorten <=-20](\apt)--(\bpt);
\fi
}
}
\end{tikzpicture}
}
\begin{document}
\DividedPlanes{2}
\DividedPlanes{3}
\DividedPlanes{4}
\DividedPlanes{5}
\DividedPlanes{6}
\end{document}