我该如何填充该图片中平面与圆柱交点的下方?

我该如何填充该图片中平面与圆柱交点的下方?

我想填充此图片中平面与圆柱交点的下方,包含圆弧 AB 和 A'B' 以及多边形 ABB'A' 的下方(填充形式为水)。我的代码

\documentclass[border=2mm,12pt]{standalone}
\usepackage{tikz}
\usepackage{fouriernc}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\newcommand{\boundellipse}[3]% center, xdim, ydim
{(#1) ellipse (#2 and #3)
}
\def\x{1}
\def\y{3}
\def\h{6}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (O') at (\h,0);
\coordinate (A) at ($(190:{\x} and {\y})$);
\coordinate (B) at ($(335:{\x} and {\y})$);
\tkzDefPointBy[translation=from O to O'](A){A'}
 \tkzGetPoint{A'}
 \tkzDefPointBy[translation=from O to O'](B)
 \tkzGetPoint{B'}
 \tkzDrawPoints[fill = black,size = 5 pt](O,A,B,A',B',O')
\tkzLabelPoint[above](O){$O$}
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](O',B')
\tkzLabelPoints[below right](B)
\tkzLabelPoints[above left](A')
\tkzDrawPolygon(A,B,O)
\draw[thick] (B)--(B');
\draw[dashed] (A)--(A') (A')--(B')  (O)--(O') (O')--(A') (O')--(B');
\draw[thick] \boundellipse{0,0}{\x cm}{\y cm};
\draw [dashed] (\h cm,\y cm) arc (90:270:\x cm and \y cm);
\draw [thick] (\h cm,-\y cm) arc (-90:90:\x cm and \y cm);
\draw[thick] (0,\y cm)--(\h cm,\y cm);
\draw[thick] (0,-\y cm)--(\h cm,-\y cm);
\tkzFillPolygon[pattern color=blue, pattern=vertical lines](A,B,B',A')
\end{tikzpicture}
\end{document} 

在此处输入图片描述

我该如何填写?

答案1

我会用tikz-3dplot这个。然后您可以使用 3d 坐标并更改视图等。

\documentclass[border=2mm,12pt,tikz]{standalone}
\usepackage{tikz-3dplot} 
\usetikzlibrary{3d,calc,backgrounds}
\usepackage{fouriernc}
%% smuggling from https://tex.stackexchange.com/a/470979/121799
\newcounter{smuggle}
\DeclareRobustCommand\smuggleone[1]{%
    \stepcounter{smuggle}%
    \expandafter\global\expandafter\let\csname smuggle@\arabic{smuggle}\endcsname#1%
    \aftergroup\let\aftergroup#1\expandafter\aftergroup\csname smuggle@\arabic{smuggle}\endcsname
}
\DeclareRobustCommand\smuggle[2][1]{%
    \smuggleone{#2}%
    \ifnum#1>1
    \aftergroup\smuggle\aftergroup[\expandafter\aftergroup\the\numexpr#1-1\aftergroup]\aftergroup#2%
    \fi
}
\begin{document}
% please do not use \x and \y since these are used in the calc syntax
\def\myx{1}
\def\myy{3}
\def\h{6}

\tdplotsetmaincoords{83}{70}
\begin{tikzpicture}[tdplot_main_coords]
%    \draw[-latex] (0,0,0) -- (1,0,0) node[pos=1.1]{$x$};
%    \draw[-latex] (0,0,0) -- (0,1,0) node[pos=1.1]{$y$};
%    \draw[-latex] (0,0,0) -- (0,0,1) node[pos=1.1]{$z$};
  \begin{scope}[canvas is xz plane at y=0]
   \draw[thick] (0,0) coordinate[label=above:$O$] (O) circle (\myy);
  \end{scope}
  \begin{scope}[canvas is xz plane at y=\h]
   \path (0,0) coordinate[label=above:$O'$] (O');   
   \draw[thick] let \p1=($(O')-(O)$),\n1={atan2(\y1,\x1)} in
    \pgfextra{\pgfmathsetmacro{\myangle}{\n1}\smuggle{\myangle}} 
    ($(O)+({90+\n1}:\myy)$) --
    ({90+\n1}:\myy) arc({90+\n1}:{-90+\n1}:\myy) --
    ($(O)+({-90+\n1}:\myy)$) ;
   \begin{scope}[on background layer,every label/.append style={black}]
     \draw[dashed] ({90+\myangle}:\myy) arc({90+\myangle}:{180+90+\myangle}:\myy); 
     % front
     \shade[top color=blue!30,bottom color=blue,shading angle=\myangle] 
      ($(O)+({-20}:\myy)$) -- ($(O')+({-20}:\myy)$) 
      arc(-20:-90+\myangle:\myy) --($(O)+({-90+\myangle}:\myy)$)
      arc(-90+\myangle:-20:\myy);
      % left
     \shade let \p1=($({-160}:\myy)-({-20}:\myy)$),\n1={180+atan2(\y1,\x1)} in
      [top color=blue!30,bottom color=blue,shading angle=\n1]
      ($(O)+({-20}:\myy)$) arc(-20:-160:\myy) -- cycle;
     %top 
     \fill[blue!20]  ($(O')+({-20}:\myy)$) coordinate[label=right:$B'$](B') 
      -- ($(O')+({-160}:\myy)$) coordinate[label=above left:$A'$](A') 
      -- ($(O)+({-160}:\myy)$) coordinate[label=left:$A$](A) 
      -- ($(O)+({-20}:\myy)$) coordinate[label=right:$B$](B) 
      -- cycle;
   \end{scope}
  \end{scope}
  \draw[dashed] (O) -- (O') -- (B') -- (A')   (A) -- (A') -- (O');
  \draw (B) -- (A) -- (O) -- (B) -- (B');
  \foreach \X in {A,B,O}
  {\fill (\X) circle(1pt) (\X') circle(1pt);}
\end{tikzpicture}
\end{document} 

在此处输入图片描述

答案2

圆柱形罐体

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\newcommand{\alp}{60}
\newcommand{\bet}{30}
\fill[gray!20,opacity=.5] ({.5*cos(270+\bet)},{sin(270+\bet)}) -- ({.5*cos(270-\alp)},{sin(270-\alp)}) arc ({270-\alp}:{270+\bet}:.5 and 1);
\fill[gray!15] ({.5*cos(270-\alp)},{sin(270-\alp)}) --             ({2+.5*cos(270-\alp)},{sin(270-\alp)}) 
--({2+.5*cos(270+\bet)},{sin(270+\bet)}) 
--({.5*cos(270+\bet)},{sin(270+\bet)}) 
 --  cycle;
    \fill[gray!20] (
{.5*cos(270+\bet)},
{sin(270+\bet)}
) -- 
(
{2+.5*cos(270+\bet)},
{sin(270+\bet)}
)
arc ({270+\bet}:270:.5 and 1) -- (0,-1) -- cycle;
\draw[gray] (0,0) ellipse (.5 and 1);
\draw[gray] (2,-1) arc (-90:90:.5 and 1);
\draw[gray!20] (2,-1) arc (-90:-270:.5 and 1);
\draw[gray] (0,1) -- (2,1);
\draw[gray] (0,-1) -- (2,-1);
\end{tikzpicture}
\end{document}

相关内容