为了说明这个问题,请考虑一个您熟悉的简单例子:一个由位于倾斜平面上的块组成的机械系统。
我在块上附加了一个笛卡尔坐标系,并显示了权重向量。我想用最少的计算和最简单的工作流程轻松绘制该系统。
第一步:我把每个部分分别画出来如下:
\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}