在 TikZ 中使用 calc

在 TikZ 中使用 calc

如何calc在 TikZ 中使用函数?

例如,假设我有一个函数f(x)=x^2

现在,我想要找到f(1)和f (2),然后我想要\draw f(1) -- f(2);

答案1

pgf 2.1 的可能性

\documentclass{article} 
\usepackage{tikz}
\makeatletter
\pgfmathdeclarefunction{square}{1}{%
\begingroup
 \pgfmathparse{#1*#1}
 \pgfmath@smuggleone\pgfmathresult%
\endgroup}    

\begin{document}
\begin{tikzpicture}
    \draw[very thin,color=gray] (-0.1,-1.1) grid (3.9,8.1);
    \draw[->] (-0.2,0) -- (3.2,0) node[right] {$x$};
    \draw[->] (0,-0.2) -- (0,4.2) node[above] {$f(x)$};
    \draw[domain=0:3] plot (\x,{square(\x)-1}) node[below right] {$f(x) = x^2$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我不太清楚你想做什么。

如果您想要绘制函数,那么 TikZ\plot命令就是您要找的:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \draw[very thin,color=gray] (-0.1,-0.1) grid (2.9,4.1);
    \draw[->] (-0.2,0) -- (3.2,0) node[right] {$x$};
    \draw[->] (0,-0.2) -- (0,4.2) node[above] {$f(x)$};

    \draw[domain=1:2] plot (\x,{\x^2}) node[below right] {$f(x) = x^2$};
\end{tikzpicture}
\end{document} 

阴谋

前几个命令只是绘制轴和网格,最后一个命令绘制图。当然,这node[below right] {$f(x) = x^2$}部分完全是可选的。

有关详细信息,请参阅 TikZ 手册的“函数图”一章(2.10 手册中的第 19 章)。

编辑:对 Jacques 版本的问题的回答:

它可能不起作用,因为宏的扩展顺序不正确。我不知道如何直接修复它,但 pgf 实际上提供了自己的创建数学函数的功能:\pgfmathdeclarefunction。它在 v2.10 手册的第 65 章(“自定义数学引擎”)中进行了描述。下面是简短的描述:宏采用 3 个参数:

  • 应该创建的函数的名称,
  • 函数接受的参数数量
  • 执行实际计算并设置\pgfmathresult宏的一些代码。最简单的方法是调用\pgfmathparse(这当然不是计算效率最高的方法,但它是最简单的方法)。

例如,一个函数square可能定义为

\pgfmathdeclarefunction{square}{1}{\pgfmathparse{#1*#1}}

然后你就可以编写类似的代码\draw (1,{square(1)}) -- (2,{square(2)});

答案3

这实际上不是一个答案,而是一种尝试,以使我认为 Regis 提出的问题更加精确。如果我这样做

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\square}[1]{\pgfmathparse{#1*#1}\pgfmathresult}
\begin{document}
\begin{tikzpicture}
\node {\square{1}};
\end{tikzpicture}
\end{document}

我确实得到了一个在 (0,0) 处只有 1.0 的图形。另一方面,如果我尝试使用函数 \square 来计算坐标,我会得到我无法理解的错误:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\square}[1]{\pgfmathparse{#1*#1}\pgfmathresult}
\begin{document}
\begin{tikzpicture}
\draw (1,\square{1}) -- (2,\square{2});
\end{tikzpicture}
\end{document}

用 \draw 命令替换并%\draw ($(1,\square{1})$) -- ($(2,\square{2})$);没有帮助。

答案4

使用 PSTricks 会变得容易得多。表示问题要点的一种方法(除其他方法外)是使用以下语法。

(*<const RPN expression> {<infix expression in x>})

例如,point(*3 {x^2})代表点(3,9)

最小工作示例

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\def\f{x^2}

\begin{document}
\begin{pspicture}(-3,-1)(3,5)
    \psaxes(0,0)(-3,-1)(3,5)
    \psplot[linecolor=blue,algebraic]{-2}{2}{\f}
    \psline[linecolor=red](*{-3 2 div} {\f})(*1 {\f})
\end{pspicture}
\end{document}

在此处输入图片描述

各种各样的

如果x是的函数y,我们有如下的另一种语法。

(**{<infix expression in y>} <const RPN expression>)

例如,point(**{-sqrt(y)} 4)代表点(-2,4)

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\def\f{x^2}

\begin{document}
\begin{pspicture}(-3,-1)(3,5)
    \psaxes(0,0)(-3,-1)(3,5)
    \psplot[linecolor=blue,algebraic]{-2}{2}{\f}
    \psline[linecolor=red](**{-sqrt(y)} 9 4 div)(*1 {\f})
\end{pspicture}
\end{document}

相关内容