我们可以使用函数来计算 tikzpicture 中的坐标 X 和 Y 吗?

我们可以使用函数来计算 tikzpicture 中的坐标 X 和 Y 吗?

我想计算坐标 X 和 Y 来构建一个图形:

\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}

\usepackage{tikz} % pour dessins
\usetikzlibrary{shapes, calc, arrows} % pour complement tikz

\begin{document}

\begin{tikzpicture}
\def\focale{3}  
\def\angleg{32} 
\def\angled{90-\angleg} 

\coordinate (P1) at (\tan(\angleg)*\focale,1.5cm);
    ...
\end{tikzpicture}%<<<== must use well balanced curly-braces

\end{document}

但我有一个错误:

Missing \endcsname inserted \coordinate (P1) at (\tan(32)

我尝试将计算包含在内,$但是:

Paragraph ended before \tikz@cc@parse@factor was complete

答案1

简短的回答是:是的,你可以。

您的错误在于您在输入函数时使用了反斜杠,\而这是向 LaTeX 表明它是编译中的命令的方式。计算数字时,函数不应使用反斜杠,而应使用tan(angleg)等等。

对于更复杂的函数,使用花括号来表示它们应该在一起(如@zeroth所述)({tan(\angleg)*\focale},1.5cm)

答案2

我不同意答复中关于 \ (反斜杠)的说法:

  • \tan 必须替换为“tan”,因为您希望将数学函数应用于 \angleg,而不是写为“tan(58)”
  • 你必须保留 '\angleg' 因为 TeX 不知道 'angleg '(它是纯文本)

我同意关于 {}(花括号)的答复,每次在点定义中有一些 () 时,花括号都是必需的。

但完整的答案是使用 $ 语法来计算点坐标:

\coordinate (P1) at ($({tan(\angleg)*\focale},1.5cm)$);

此外,更好的做法可能是更换

\def\gnat{<some math expresion>}

经过

\pfgmathsetmacro{\gnat}{<some math expresion>}

因为当使用后者时,计算会被立即解析并执行。

答案3

使用 PSTricks。仅用于比较目的。

PSTricks 相当于 TikZ({tan(\complement)*\radius},1.5)的是

  • (+{Tan(\complement)*\radius},1.5)
  • (**{Tan(\complement)*\radius} 1.5)
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}

\def\radius{3}  
\def\angle{45} 
\def\complement{90-\angle}

\begin{document}    
\begin{pspicture}[showgrid](6,3)
\pnode(+{Tan(\complement)*\radius},1.5){P1}
%\pnode(**{Tan(\complement)*\radius} 1.5){P1}
\pscircle*[linecolor=red](P1){2pt}
\end{pspicture}
\end{document}

在此处输入图片描述

各种各样的

在 PSTricks 中,有几种定义坐标的方法。它可以用现有节点或数学表达式来表示。对于数学表达式,我们有以下四种方法。

  • 横坐标和纵坐标均为 RPN。

    例如:(!2 3 mul 1 sub 2 0 add)是一个点(5,2)

  • 横坐标为 RPN,纵坐标为代数。纵坐标可以是 的函数x

    例如:(*{2 3 add} {x-3})是一个点(5,2)

  • 横坐标为代数,纵坐标为 RPN。横坐标可以是 的函数y

    例如:(**{y*3-1} {1 1 add})是一个点(5,2)

  • 横坐标和纵坐标都是代数的。

    例如:(+{3+2},1+1)是一个点 (5,2)

下面的例子使用\def将代数表达式表达为的函数xy常数。

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
    \def\f[#1]{2*#1-1}

\begin{document}    
\begin{pspicture}[showgrid](4,3)
    \pscircle*[linecolor=red](+{\f[2],\f[1]}){2pt}% its center is (3,1)
    \pscircle*[linecolor=green](*{1 0 add} {\f[x]}){2pt}% its center is (1,1)
    \pscircle*[linecolor=blue](**{\f[y]} {2 0 add}){2pt}% its center is (3,2)
\end{pspicture}
\end{document}

相关内容