当容器旋转时,自动保持流体表面水平并且液体体积保持不变的最简单的方法是什么?

当容器旋转时,自动保持流体表面水平并且液体体积保持不变的最简单的方法是什么?

我有一个对称容器(旋转的空心物体),其中部分填充了液体。当我们绕垂直于显示屏的任意轴旋转容器时,液体的表面必须与未旋转容器中的液体表面平行。

为了更加符合实际,液体的体积必须守恒。换句话说,阴影区域的面积在旋转后必须保持不变。

我想通过改变旋转角度来制作动画,因此自动调整是必须的。

在此处输入图片描述

\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}

注:不知道原作者是谁,是在技巧

问候,尼克

相关内容