Tikz:Latex 宏绘制到 [in=,out=] 和点坐标

Tikz:Latex 宏绘制到 [in=,out=] 和点坐标

我想在命令中计算坐标时使用乳胶宏,但如果目标点坐标和指令都涉及这样的宏,\draw这似乎是不可能的。[in=...,out=...]

以这个 MWE 为例:

\documentclass{standalone}
\usepackage{tikz} 
\begin{document}
\def\a{25}
\def\b{0}
\def\r{1.5}
\begin{tikzpicture}
\draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
\draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
\draw [blue] (0,0) to [out=-\a,in=180+\a] ({\r*cos(\b)},{\r*sin(\b)});
\end{tikzpicture}
\end{document}

第一个\draw命令运行正常,tikz 执行了 sin 和 cos 计算;第二个\draw命令也运行正常,latex\a在 tikz 处理 to[in=-\a ,out=180+\a]指令之前进行了替换。但是,最后一个\draw命令失败并显示错误消息

"""
! Package pgf Error: No shape named 1 is known.

See the pgf package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.11 ...-\a,in=180+\a] ({\r*cos(\b)},{\r*sin(\b)})  
"""

这是为什么?我该如何让它工作?谢谢 Jose

答案1

绘制命令to不直接接受计算坐标,您可以简单地创建一个命名坐标,或者使用适当的极坐标,就像我对绿线所做的那样:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\newcommand*\a{25}
\newcommand*\b{0}
\newcommand*\r{1.5}
\begin{tikzpicture}
  \coordinate (target) at ({\r*cos(\b)},{\r*sin(\b)});
  \draw (0,0) -- (target);
  \draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
  \draw [blue] (0,0) to [out=-\a,in=180+\a] (target);
  \draw [green,very thick,dashed] (0,0) to [out=-\a,in=180+\a] +(\b:\r);
\end{tikzpicture}
\end{document}

答案2

我不知道为什么你的解决方案不起作用,但这个有效

\documentclass{standalone}
    \usepackage{tikz} 
    \usetikzlibrary{calc}
    \begin{document}
    \def\a{25}
    \def\b{0}
    \def\r{1.5}
    \begin{tikzpicture}
    \draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
    \draw [red] (0,0) to [out={\a},in={180-\a}] (1.5,0);
    \pgfmathsetmacro{\rC}{\r*cos(\b)}
       \pgfmathsetmacro{\rS}{\r*sin(\b)}
  \draw [blue] (0,0) to [out={-\a},in={180+\a}] (\rC,\rS);
    \end{tikzpicture}
    \end{document}

在此处输入图片描述

答案3

这似乎是 Ti 的一个错误Z,只要其后的 x 坐标to[in=...,out=...]有函数,就会出现,包括sincosroundfloor等等。

一个简单的解决方案是在 x 坐标处添加另一对花括号,如下所示:

\documentclass{standalone}
\usepackage{tikz} 
\begin{document}
\def\a{25}
\def\b{0}
\def\r{1.5}
\begin{tikzpicture}
\draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
\draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
\draw [blue] (0,0) to [out=-\a,in=180+\a] ({{\r*cos(\b)}},{\r*sin(\b)});
\end{tikzpicture}
\end{document}

相关内容