![路径与节点问题](https://linux22.com/image/285158/%E8%B7%AF%E5%BE%84%E4%B8%8E%E8%8A%82%E7%82%B9%E9%97%AE%E9%A2%98.png)
在下面的例子中,为什么没有蓝色三角形?
\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\tikzset{small dot/.style={fill=black,circle,scale=0.3},}
\begin{document}
\begin{tikzpicture}
\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;
\draw[fill=red] (A0)--(A1)--(A2)--cycle ;
\draw ($ (A0)!.5!(A1) $) node (E0) {};
\draw ($ (A1)!.5!(A2) $) node (E1) {};
\draw ($ (A2)!.5!(A0) $) node (E2) {};
\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;
\end{tikzpicture}
\end{document}
这只是我遇到的问题的一个简单示例。由于我需要用它let...in...
来计算! !
系数,因此我对 Ex 节点使用了此节点定义。是否有其他方法或如何更正蓝色三角形绘图。
一个人可以作弊:
\draw ($ (A0)!.5!(A1) $) node (E0) {};
\draw ($ (A1)!.5!(A2) $) node (E1) {};
\draw ($ (A2)!.5!(A0) $) node (E2) {};
\coordinate (B0) at (E0) ;
\coordinate (B1) at (E1) ;
\coordinate (B2) at (E2) ;
\draw[fill=blue] (B0)--(B1)--(B2)--cycle ;
工作正常,但为什么我第一次不工作?
答案1
nodes
不是几何点,即使没有内容,它们也占据空间。这是因为它们有inner sep
和outer sep
。当你
\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;
您没有给出node
应该从哪一点绘制线条,因为上面的代码行中没有指定锚点。请注意,acoordinate
是一个几何点,因此您可以直接从它绘制。因此,要从节点绘制,必须指定适当的锚点,如(E0.center)
。另一方面,除了,您可以像ferahfeza在他的回答中所做的那样直接定义一个坐标,或者简单地以以下方式node
定义为一个坐标:node
node[coordinate] (E0) {};
或者
node[inner sep=0pt,outer sep=0pt] (E0) {};
这两种方法都行得通。但是如果你采用后者,你仍然需要提供像 这样的锚点(E0.center)
。
示例代码:
\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\tikzset{small dot/.style={fill=black,circle,scale=0.3},}
\begin{document}
\begin{tikzpicture}
\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;
\draw[fill=red] (A0)--(A1)--(A2)--cycle ;
\path ($ (A0)!.5!(A1) $) node[inner sep=0pt,outer sep=0pt] (E0) {};
\path ($ (A1)!.5!(A2) $) node[inner sep=0pt,outer sep=0pt] (E1) {};
\path ($ (A2)!.5!(A0) $) node[inner sep=0pt,outer sep=0pt] (E2) {};
\draw[fill=blue] (E0.north)--(E1.center)--(E2.east)--cycle ;
\end{tikzpicture}
\end{document}
请注意,我没有给出绘制的锚点,而是center
选择了合适的锚点(尝试失败),以便蓝色三角形的角不会突出红色三角形。寓意是,当您想要坐标时,定义一个而不是节点。
答案2
将节点定义为坐标:
\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
%\tikzset{small dot/.style={fill=black,circle,scale=0.3},}
\begin{document}
\begin{tikzpicture}
\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;
\draw [fill=red] (A0)--(A1)--(A2)--cycle ;
\coordinate (E0) at ($ (A0)!.5!(A1) $);
\coordinate (E1) at ($ (A1)!.5!(A2) $);
\coordinate (E2) at ($ (A2)!.5!(A0) $) ;
\draw [fill=blue] (E0)--(E1)--(E2)--cycle ;
\end{tikzpicture}
\end{document}
答案3
基于默认选项的无需计算的紧凑解决方案。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=5]
\draw[fill=red] (0,0) -- coordinate (E0)(1,0)
-- coordinate (E1)(0,1)
-- coordinate (E2)
cycle ;
\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;
\end{tikzpicture}
\end{document}