如何用移位变量和函数来表达 PSTricks 点?

如何用移位变量和函数来表达 PSTricks 点?

举一个简单的例子,假设\f(x)是一条二次曲线,定义如下

\def\f(#1){-#1*(#1-8)/4}

对于每个元素\ix{0,1,2,3,4,5,6,7,8}都有一个点(\ix,\f(\ix)),该点是 1 厘米见方正方形的中心。

如何用和\psframe来表达的左下角点和右上角点?\ix\f(\ix)

注意:请不要建议其他更简单的解决方案,例如使用\rput放置正方形,因为我对 PSTricks 点表达式感兴趣。如果可能的话,应避免使用 RPN 符号。

为了节省您的时间,我为您提供了如下的框架(不起作用)。

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

\begin{document}

\def\f(#1){-#1*(#1-8)/4}

\begin{pspicture}
\multido{\ix=0+1}{9}{
% the following expression is wrong!
\psframe[dimen=middle](*\ix-0.5 {\f(x)-0.5})(*\ix+0.5 {\f(x)+0.5})
}
\psplot[algebraic]{0}{8}{\f(x)}
\end{pspicture}

\end{document}

我想要得到的输出如下:

在此处输入图片描述

答案1

\listfiles
\documentclass{article}
\usepackage{pst-plot}
\SpecialCoor
\begin{document}

\def\f(#1){-#1*(#1-8)/4}

\begin{pspicture}(-1,-2)(10,5)
\psforeach{\ix}{0,1,..,9}{%
  \rput(*\ix\space {\f(x)}){\psframe[dimen=middle](-0.5,-0.5)(0.5,0.5)}}
\psplot[algebraic]{0}{8}{\f(x)}
\end{pspicture}

\begin{pspicture}(-1,-2)(10,5)
\psforeach{\ix}{0,1,..,9}{%
  \psframe[dimen=middle](*{\ix\space 0.5 sub}  {\f(\ix)-0.5})
                        (*{\ix\space 0.5 add} {\f(\ix)+0.5})}
\psplot[algebraic]{0}{8}{ \f(x) }
\end{pspicture}

\end{document}

答案2

使用代数函数的后记公式,然后使用“原始 PS”符号引用坐标:

在此处输入图片描述

\documentclass{article}
\usepackage{pst-plot}% http://ctan.org/pkg/pst-plot
% The following package (multido) is loaded by pst-plot
%\usepackage{multido}% http://ctan.org/pkg/multido
\begin{document}

\def\f(#1){-#1*(#1-8)/4}% function f(x)=-x*(x-8)/4
% PS definition of f(x): x neg x 8 sub 4 div mul
\def\halfsize{0.5\space}% Modify this for smaller squares

\begin{pspicture}
  \multido{\ix=0+1}{9}{%
    \psframe[linewidth=0.5pt,linecolor=red!50]% Red squares
      (!\ix\space \halfsize sub \ix\space neg \ix\space 8 sub 4 div mul \halfsize sub)% bottom left
      (!\ix\space \halfsize add \ix\space neg \ix\space 8 sub 4 div mul \halfsize add)% upper right
  }
  \psplot[algebraic]{0}{8}{\f(x)}% Plot function
\end{pspicture}

\end{document}

后记表述\f(x)=-x*(x-8)/4

x 负 x 8 减 4 除 乘

现在,您可以使用后记符号/坐标指定节点位置(!<x> <y>)(请原谅 ASCII 艺术):

         (     x - 0.5     ,      - x    *      (x - 8) / 4          - 0.5 )

         |     x - 0.5     |      - x    *      (x - 8) / 4          - 0.5 |
         |     x - 0.5     |      - x    *      (x - 8) / 4        |0.5| - |
         |     x - 0.5     |      - x    |      (x - 8) / 4        |0.5| - |
         |     x - 0.5     |      - x    |      x - 8    |         |0.5| - |
         |    x    |0.5| - |    x    | - |    x    |8| - |4| / | * |0.5| - |
(x,y) ~ (!\ix\space 0.5 sub \ix\space neg \ix\space 8 sub 4 div mul 0.5 sub)

要求您\space在控制序列之后使用以引入空格,否则元素会被连接在一起,从而导致输出不正确(或者有时输入无法编译)。另外,请注意,,坐标<x>和之间没有逗号分隔<y>;它们只是放在堆栈上 - 首先<x>然后<y>

相关内容