在 tikz 上的图形中绘制具有 sqrt 值的点

在 tikz 上的图形中绘制具有 sqrt 值的点

我正在努力绘制以下坐标:

\begin{tikzpicture}
    \coordinate (a1) at (0,(1+{sqrt(\5)})^{2}/2);
    \coordinate (a2) at (0,2);
    \coordinate (a3) at (0,1);
    \coordinate (a4) at (2,1);
    \coordinate (a5) at (1,2);
    
    \node[points, anchor=north] at (0,(1+{sqrt(\5)})^{2}/2) {};
    \node[points, anchor=north] at (0,2) {};
    \node[points, anchor=west] at (0,1) {};
    \node[points, anchor=north] at (2,1) {};
    \node[points, anchor=east] at (1,2) {};


\draw[black] (a1) -- (a2) {};
\draw[black] (a1) -- (a3) {};
\draw[black] (a1) -- (a4) {};
\draw[black] (a1) -- (a5) {};
\draw[black] (a2) -- (a3) {};
\draw[black] (a2) -- (a4) {};
\draw[black] (a2) -- (a5) {};
\draw[black] (a3) -- (a4) {};
\draw[black] (a3) -- (a5) {};
\draw[black] (a4) -- (a5) {};


\node[dotnode] at (a1) {};
\node[dotnode] at (a2) {};
\node[dotnode] at (a3) {};
\node[dotnode] at (a4) {};
\node[dotnode] at (a5) {};
\end{tikzpicture}

如果我删除点 a1,代码似乎可以正常工作。但是,我希望 a1 的值为 $\frac{(1+\sqrt{5})^{2}}{2}$,并且我尝试了几种不同的表达式来获取此值,包括写入 \5、\sqrt 等,但似乎无法使其正常工作。有没有办法做到这一点而不必写一个近似值?

答案1

在此处输入图片描述


\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc} 

\begin{document}

\begin{tikzpicture}
\node at (0, 0) {node1};
\node at ($({sqrt(1)}, {sqrt(1)})$) {node2}; % Watch out for the right amount of "()".
\node at ($({sqrt(2)}, {sqrt(2)})$) {node3};
\node at ($({sqrt(4)}, {sqrt(4)})$) {node4};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

我认为@DrManuel 没有完全回答 OP。

如果你计算一下单身的坐标(此处ya1),您既不需要calc库也不需要$...$语法。但是,当表达式包含括号时,必须在 中受到保护{...}。如果没有这种预防措施,结束)将被解释为部分的结束(x,y)

在这里你混合了 pgfmath计算和标准公式排版(即不需要额外的括号,并sqrt计算平方根,而\sqrt在这里是无意义的,并且可能会触发错误)。

因此,你应该写

\coordinate (a1) at (0,{(1+sqrt(5))^2/2});

请注意:

  • 相反\node(或node在路径中),既不是命令\coordinate也不\draw期望额外的参数,因此所有的空{}都是无用的(如果没有错误)。

  • 最后,正如@DrManuel 回答中部分建议的那样,您的所有\nodes 和 \coordinates 都是高度冗余的。更短更好的编码仅涉及:

    \node[points, anchor=north] (a1) at (0,{(1+sqrt(5))^2/2}) {};

对于接下来的几点也是同样。

编辑:无论如何,我会使用:

\pgfmathsetmacro\MYCOORDY{(1+sqrt(5))^2/2}

并在节点定义中使用如此定义的宏\MYCOORDY,或者更好的是:

\pgfmathsetmacro\Golden{(1+sqrt(5))/2}
\node[points, anchor=north] (a1) at (0,1+\Golden) {};

相关内容