我的目标是绘制一个正方形(使用 TikZ),里面有一个红点,位于其对角线的交叉点上:
虽然下面的方法也可以正常工作:
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0,0);
\coordinate (b) at (1,1);
\coordinate (c) at (1,0);
\coordinate (d) at (0,1);
\coordinate (i) at (intersection of a--b and c--d);
\fill[red] (i) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}
当我尝试这个不涉及坐标指定的解决方案时:
\begin{tikzpicture}
\coordinate (i) at (intersection of {(0,0)--(1,1)} and {(1,0)--(0,1)});
\fill[red] (i) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
结果是:
因此我尝试将代码修改如下:
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\coordinate (i) at (intersection of {(0,0)--(1,1)} and {(1,0)--(0,1)});
\fill[red] (i) circle (2pt);
\end{tikzpicture}
这导致了以下错误消息:
! Package PGF Math Error: You asked me to calculate `1/0.0', but I cannot divide any number by zero.
问题是——我不明白为什么上面的代码会这样。通过定义的坐标计算交点和直接通过平面上的点计算交点有什么区别。你能给我解释一下吗?
答案1
尽管 Mad Hatter 使用的语法仍然有效,但它是旧语法,在 TikZ 3.0 中不再有记录。因此,为了完整起见,就像 TikZ 3.0获得类似结果的方法可能是:
- 加载
intersections
库 - 声明两个命名路径:
\path[name path=ac] (0,0)--(1,1);
... - 对命名路径的交叉点采取行动:
name intersections={of=ac and bd}
intersections
有关图书馆的更多信息13.3.2 任意路径的交叉点。
完整代码:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\path[name path=ac] (0,0)--(1,1);
\path[name path=bd] (1,0)--(0,1);
\fill [red, name intersections={of=ac and bd}] (intersection-1) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}
答案2
根据 Ulrike 的说法评论。
平均能量损失
\documentclass[convert]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0,0);
\coordinate (b) at (1,1);
\coordinate (c) at (1,0);
\coordinate (d) at (0,1);
\coordinate (i) at (intersection of {0,0--1,1} and {1,0--0,1});
\fill[red] (i) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}
结果
答案3
@UlrikeFischer -- @Ignasi -- 这段代码可以算正常吗
\documentclass[12pt]{article}
\usepackage{tikz}
%\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\path[] (0,0)--(1,1) node (A) [circle,fill, red,inner sep=0pt, pos=0.5,minimum size=4pt,text width=1pt] {};
\path[] (1,0)--(0,1);
%\fill [red, pos=0.5] (path=ac) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}