下面的代码在 (cos 37°, sin 37°) 处生成坐标 A。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{math,calc}
\title{}
\author{}
\date{}
\begin{document}
\maketitle
\tikzmath{\x=37;}
\begin{tikzpicture}
\coordinate (A) at ($cos(\x)*(1,0)+sin(\x)*(0,1)$);
\end{tikzpicture}
\end{document}
但是,当我将定义坐标的线改为下面时,它不再起作用。
\coordinate (A) at ($(cos(\x),sin(\x))$);
当轴数很多时,分离轴可能很麻烦。我怎样才能将所有东西都写在一个坐标中?
答案1
您需要保护)
三角函数,否则坐标解析器将会做出令人讨厌的事情。
这意味着它会认为cos(\x
是一个坐标规范,并且由于它不符合任何其他有效的 TikZ 坐标规范,它将假定它cos(\x
是一个坐标或节点的名称:
Package pgf Error: No shape named `cos(37' is known.
然后calc
图书馆就不能再处理了), sin(\x
:
Package tikz Error: + or - expected.
就你的情况而言,这应该是
\coordinate (A) at ($({cos(\x)}, {sin(\x)})$);
或者——在这个简单的情况下——
\coordinate (A) at ($(cos \x, sin \x)$);
请注意,您不需要calc
库来实现这一点。TikZ 无论如何都会抛出 PGFmath 中的每个坐标部分:
\coordinate (A) at (cos \x, sin \x);
% or
\coordinate (A) at ({cos(\x)}, {sin(\x)});
PGF/TikZ 也内置了极坐标。你可以直接使用
\coordinate (A) at (\x : 1);
这也可以处理不同的半径:
\coordinate (A) at (\x : 1 and 2); % i.e. cos \x * (1, 0) + sin \x * (0, 2)