为什么 TikZ 让我计算最终角度但不让我计算初始角度?

为什么 TikZ 让我计算最终角度但不让我计算初始角度?

该文件运行后,正如我所料,它完成了应有的工作。

\documentclass{amsart}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\centerarc[#1](#2)(#3:#4:#5)% Syntax: [draw options] (center) (initial angle:final angle:radius)
    { \draw[#1] ($(#2)+({#5*cos #3)},{#5*sin #3)})$) arc (#3:#4:#5); }
   \draw (0,0) circle (2);
\foreach \x in {30,60,90}
                         %I want to add a calculation in the following line      
   \centerarc[]($2*(cos \x,sin \x)$)(\x:\x+150:2);
\end{tikzpicture}
\end{document}

但这不是我想要画的。我只想在圆内画圆弧。所以我希望初始角度为\x+120

但是当我尝试在表达式中的第一个参数 \x 上引入任何计算(+0 除外)时, (\x:\x+150:2)图形会以我目前无法预测的方式发生变化。具体来说,我想要的角度 (\x+120:\x+150:2)确实运行并生成了 pdf,但图形是不可见的,显然在 pdf 范围之外被放大了。

\x+150但在同一个表达式中 计算第二个参数却没有问题(\x:\x+150:2)

我想了解这是为什么。但我想主要问题是我想知道如何改变它,以便我可以计算初始角度和最终角度。

答案1

在表达式中,cossin是具有一个参数的函数,必须将其括在括号中:

\draw[#1] ($(#2)+({#5*cos(#3)},{#5*sin(#3)})$) arc (#3:#4:#5);

代码:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \def\centerarc[#1](#2)(#3:#4:#5){
    % Syntax: [draw options] (center) (initial angle:final angle:radius)
    \draw[#1] ($(#2)+({#5*cos(#3)},{#5*sin(#3)})$) arc (#3:#4:#5);
  }
  \draw (0,0) circle (2);
  \foreach \x in {30,60,90} {
    % I want to add a calculation in the following line      
    \centerarc[]($2*(cos \x,sin \x)$)(\x+120:\x+150:2);
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我不知道为什么\x+120不能用作弧定义中的初始角度,但这里有两个不需要使用错误语法的替代解决方案。

第一个解决方案是使用cliping圆内的圆弧:

\documentclass{amsart}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\centerarc[#1](#2)(#3:#4:#5)% Syntax: [draw options] (center) (initial angle:final angle:radius)
    { \draw[#1] ($(#2)+({#5*cos #3)},{#5*sin #3)})$) arc (#3:#4:#5); }
   \draw (0,0) circle (2);
   \begin{scope}
   \clip (0,0) circle (2);
\foreach \x in {30,60,...,360}
                         %I want to add a calculation in the following line      
   \centerarc[]($2*(cos \x,sin \x)$)(\x:\x+150:2);
    \end{scope}
\end{tikzpicture}
\end{document}

第二个使用evaluate选项来foreach计算\x+120起始角度:

\documentclass{amsart}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\centerarc[#1](#2)(#3:#4:#5)% Syntax: [draw options] (center) (initial angle:final angle:radius)
    { \draw[#1] ($(#2)+({#5*cos #3)},{#5*sin #3)})$) arc (#3:#4:#5); }
   \draw (0,0) circle (2);
\foreach \x [evaluate=\x as \start using \x+120] in {30,60,...,360}
                         %I want to add a calculation in the following line      
   \centerarc[]($2*(cos \x,sin \x)$)(\start:\x+150:2);
\end{tikzpicture}
\end{document}

两种解决方案都产生相同的结果:

在此处输入图片描述

相关内容