如何平移一组 PSTricks 对象并旋转它?

如何平移一组 PSTricks 对象并旋转它?

为了说明这个问题,请考虑一个您熟悉的简单例子:一个由位于倾斜平面上的块组成的机械系统。

我在块上附加了一个笛卡尔坐标系,并显示了权重向量。我想用最少的计算和最简单的工作流程轻松绘制该系统。

第一步:我把每个部分分别画出来如下:

在此处输入图片描述

\documentclass{article}
\usepackage{pstricks-add}

\def\block{%
    \psaxes[ticks=none,labels=none,linestyle=dashed]{->}(0,0)(-2,-2)(2,2)[$x$,0][$y$,90]
    \psframe*[linecolor=gray,opacity=0.5](-1,-0.5)(1,0.5)
    \psdots[linecolor=red](0,-0.5)
    \psline{->}(1.5;-45)
    \uput[-45]{45}(1.5;-45){$\vec{w}$}  
}
\begin{document}

\begin{pspicture}[showgrid=bottom](-3,-9)(6,2)
    \block
    \pspolygon(-1,-2)(5,-8)(-1,-2|5,-8)
    \psdots[linecolor=blue](1,-4)
\end{pspicture}

\end{document}

下一步:我尝试按如下方式合并它们:

在此处输入图片描述

\documentclass{article}
\usepackage{pstricks-add}

\def\block{%
    \psaxes[ticks=none,labels=none,linestyle=dashed]{->}(0,0)(-2,-2)(2,2)[$x$,0][$y$,90]
    \psframe*[linecolor=gray,opacity=0.5](-1,-0.5)(1,0.5)
    \psdots[linecolor=red](0,-0.5)
    \psline{->}(1.5;-45)
    \uput[-45]{45}(1.5;-45){$\vec{w}$}  
}
\begin{document}

\begin{pspicture}[showgrid=bottom](-3,-9)(6,2)
    \rput{-45}(1,-4){\block}
    \pspolygon(-1,-2)(5,-8)(-1,-2|5,-8)
    \psdots[linecolor=blue](1,-4)
\end{pspicture}

\end{document}

你看到奇怪的地方了吗?半块积木都沉入了斜面。我想修复它。

一般的问题是: 如何平移 PSTricks 对象系统使得某个点(属于该系统)与目标点重合,并围绕该某个点旋转系统?

注意:如果您有其他更巧妙但更简单的想法,请告诉我。

答案1

下面的代码使用旋转通过\psrotate这种方式可以指定旋转点。

% !TEX program = arara
% !TEX encoding = utf8
% !TEX spellcheck = en_GB
%: Start Header
% arara: latex: {synctex: true}
% arara: dvips
% arara: ps2pdf

\documentclass{article}
\usepackage{pstricks-add}

\def\block{%
    \psaxes[ticks=none,labels=none,linestyle=dashed]{->}(0,0)(-2,-2)(2,2)[$x$,0][$y$,90]
    \psframe*[linecolor=gray,opacity=0.5](-1,-0.5)(1,0.5)
    \psdots[linecolor=red](0,-0.5)
    \psline{->}(1.5;-45)
    \uput[-45]{45}(1.5;-45){$\vec{w}$}  
}
\begin{document}
\begin{pspicture}[showgrid=bottom](-3,-9)(6,2)
 \rput(1,-3.5){\psrotate(0,-.5){-45}{\block}}
 \pspolygon(-1,-2)(5,-8)(-1,-2|5,-8)
  \psdots[linecolor=blue](1,-4)
\end{pspicture}
\end{document}

答案2

在现有的内部添加额外的垂直调整\rput可以保证正确的基线对齐:

在此处输入图片描述

\documentclass{article}
\usepackage{pstricks-add}% http://ctan.org/pkg/pstricks-add

\def\block{%
  \psaxes[ticks=none,labels=none,linestyle=dashed]{->}(0,0)(-2,-2)(2,2)[$x$,0][$y$,90]
  \psframe*[linecolor=gray,opacity=0.5](-1,-0.5)(1,0.5)
  \psdots[linecolor=red](0,0)
  \psline{->}(1.5;-45)
  \uput[-45]{45}(1.5;-45){$\vec{w}$}
}
\begin{document}

\begin{pspicture}[showgrid=bottom](-3,-9)(6,2)
  \rput{-45}(1,-4){\rput{0}(0,0.5){\block}}% Modified code
  \pspolygon(-1,-2)(5,-8)(-1,-2|5,-8)
  \psdots[linecolor=blue](1,-4)
\end{pspicture}

\end{document}

答案3

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}% http://ctan.org/pkg/pstricks-add

\def\block{%
  \psaxes[ticks=none,labels=none,linestyle=dashed,linecolor=red]{->}(0,0)(-2,-2)(2,2)[$x$,90][$y$,90]%
  \psframe*[linecolor=gray,opacity=0.5](-1,-0.5)(1,0.5)%
    \rput{*0}(0,0){\psline[linecolor=blue]{->}(0,-1.2)\uput[-90](0,-1.2){$\vec{w}$}}%
}
\begin{document}
\multido{\n=.0+.1}{11}{%
\begin{pspicture}[dimen=m](-1,-1)(8,9)
  \pspolygon(0,7)(0,0)(6,0)
    \pcline[linestyle=none,offset=0](0,7)(6,0)\naput[labelsep=-\pslinewidth,nrot=:U,npos=\n]{\rput(0,.5){\block}}
\end{pspicture}}

\end{document}

在此处输入图片描述

相关内容