我有一个对称容器(旋转的空心物体),其中部分填充了液体。当我们绕垂直于显示屏的任意轴旋转容器时,液体的表面必须与未旋转容器中的液体表面平行。
为了更加符合实际,液体的体积必须守恒。
换句话说,阴影区域的面积在旋转后必须保持不变。
我想通过改变旋转角度来制作动画,因此自动调整是必须的。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
PointName=none,
PointSymbol=none,
}
\def\containerpath
{%
\pstGeonode
(0,4){Top}
(0,0){Bottom}
(1,0){BottomRight}
(3,2){Right}
(1,3.5){NeckRight}
(1,4){TopRight}
\pstOrtSym{Top}{Bottom}{BottomRight,Right,NeckRight,TopRight}[BottomLeft,Left,NeckLeft,TopLeft]
\pscustom
{
\pscurve(BottomRight)(Right)(NeckRight)
\psline(TopRight)(TopLeft)(NeckLeft)
\pscurve(Left)(BottomLeft)
\closepath
}
}
\def\container
{%
\psset{unit=0.5cm}
\begin{pspicture}(-3,0)(3,4)
\psclip{\containerpath}
\psframe[linewidth=0,linestyle=none,fillstyle=solid,fillcolor=gray](-3,0)(3,2)
\endpsclip
\containerpath
\end{pspicture}
}
\begin{document}
\begin{pspicture}(6,2)
\rput(1.5,1){\container}
\rput{45}(5,1){\container}
\end{pspicture}
\end{document}
旋转容器时,如何自动保持流体表面水平,且液体体积保持不变,最简单的方法是什么?容器的顶部是开口的,因此旋转的角度不得使液体溢出。
您可以免费使用 PSTricks、TikZ 或其他软件!
答案1
这可能会回答你的问题,尽管我担心这不会保持体积守恒,因为计算所含的水需要更多的数学研究。至少这会为你完成第一项工作——保持表面与非旋转容器平行:
瓶子 http://www.x-linux.de/stackoverflow/bottle.png
\documentclass[pstricks]{standalone}
\usepackage{pstricks,multido}
\def\Bottle#1{{\pscustom[linewidth=2pt]{%
\rotate{#1}
\psline(-1,3.5)(-1,4)(1,4)(1,3.5)
\pscurve(3,2)(1,0)\psline(-1,0)
\pscurve(-3,2)(-1,3.5)}}}
\def\BottleWithWater(#1)#2{%
\rput[c]{#2}(#1){%
\rput{*0}(0,0){%
\psclip{\Bottle{#2}}
\psframe*[linecolor=gray](-6,-2)(6,2)
\endpsclip}\rput{*0}(0,0){\Bottle{#2}}}}
\begin{document}
\multido{\iA=-45+5}{19}{%
\begin{pspicture}(-2.5,-0.5)(6,5.5)
\BottleWithWater(1.5,1){\iA}
\end{pspicture}}
\end{document}
注:不知道原作者是谁,是在技巧
问候,尼克