在使用tikz的intersections library的时候产生了一个疑问,如果有两个以上的交点时,这些交点的顺序TikZ是如何判断的,比如下面代码的例子,此时intersection-1是上面的那个点,而换成intersection-2就是下面的那个点,这是如何判断的? 非常感谢!

\documentclass[a4paper]{ctexart}

\usepackage[textwidth=17cm,textheight=26cm,left=2cm,top=1.5cm]{geometry}%页面尺寸设置
\usepackage{tikz}%调用tikz宏包作图
\usetikzlibrary{intersections}%应用此 library 找到两条曲线的交点
\usetikzlibrary{calc}%in order to use the coordinate calculation functions
\usetikzlibrary{through}%this library defines keys for creating shapes that go through given points
\usetikzlibrary{backgrounds}%背景

\begin{document}
\begin{figure}[!h]\centering
\begin{tikzpicture}
 \coordinate[label=left:\textcolor{red}{$ A $}] (A) at(0,0);
 \coordinate[label=right:\textcolor{red}{$ B $}] (B) at(1.25,.25);
 \draw (A)--(B);
 
 \node [name path=D,draw,circle through=(B),label=left:\textcolor{red}{$ D $}] at (A){};
 \node [name path=E,draw,circle through=(A),label=right:\textcolor{red}{$ E $}] at (B){};
 
 \path[name intersections={of=D and E}];
 
 \coordinate[label=above:$ C $] (C) at (intersection-1);
 \draw[red] (A)--(C);
 \draw[red] (B)--(C);
\end{tikzpicture}
\end{figure}
\end{document}



2 回答2

3
<p>是根据 name intersections={of=path1 and path2} 中 path1 和 path2 的顺序决定的. 具体为:</p><p>在画好的 path2 的基础上, 按照 path1 的画图顺序排序.</p><p>一个例子如下:</p><pre class="brush:plain;toolbar:false">\documentclass{standalone} \usepackage{tikz} \usetikzlibrary{intersections} \begin{document} \begin{tikzpicture}[scale=3] \draw[name path=path1,domain=0:90,smooth] plot (\x:{sin(6*\x)}); \draw[name path=path2] (180:0.5) arc (180:450:0.5); \fill [name intersections={of=path2 and path1, name=i, total=\t}] [red, opacity=0.5, every node/.style={above left, black, opacity=1}] \foreach \s in {1,...,\t}{(i-\s) circle (2pt) node {\footnotesize\s}}; \end{tikzpicture} \end{document}</pre><p>这个是我调整了 path2 和 path1 的顺序, 后面的 \fill 语句来自 TikZ 手册 3.1.1 版 page~142.</p><p>测试的时候可以通过调整 path1 中的定义域和第二个圆弧中的起点终点来观察.</p><p style="line-height: 16px;"><img src="https://wenda.latexstudio.net/static/js/neweditor/dialogs/attachment/fileTypeImages/icon_pdf.gif"><a style="font-size:12px; color:#0066cc;" href="/data/ueditor/php/upload/file/20190901/1567309186294104.pdf" title="test-list1.pdf">test-list1.pdf</a></p><p><br></p>
3
<p>根据tikz宏包手册第13.3.2节说明:这是tikz的某个内部算法决定的,但是没有多加说明。不过你可以用 sort by 参数来区别一下。<br><br></p><p><img src="/data/ueditor/php/upload/image/20190811/1565493801887846.png" title="1565493801887846.png" alt="image.png"><br><br>只是说你这个代码是两个圆圈,不管是 sort by = D 还是 sort by = E,intersection-1 一定都会是上面的交叉点。因为circle path都是从0度开始,逆时针转到360度。因此不管是以D圆或E圆为基准 sort by,都一定会先抵达上面的交叉点。</p><p><br></p><p><img src="/data/ueditor/php/upload/image/20190811/1565494916659749.png" title="1565494916659749.png" alt="image.png"></p>

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。