Как нарисовать поперечное сечение 3D-модели цилиндра

Как нарисовать поперечное сечение 3D-модели цилиндра

Я пытаюсь использовать \tikzpicture, чтобы нарисовать изометрический вид поперечного сечения модели, с которой я работаю.

Ниже я прикрепил фотографию, на которой показан желаемый вид с размерами.

Любая помощь будет высоко оценена :)

(Извиняюсь за рисунок)

введите описание изображения здесь

решение1

Это для начала. Это не попытка полностью перерисовать картину. Однако большую ее часть она вам предоставит, остальное — IMHO повторение.

Более детально,

  • Для установки 3D-вида perspectiveиспользуется библиотека. (На мой взгляд, утверждение isometric viewимеет смысл только в том случае, если дополнительно указать ориентацию цилиндра в 3D-пространстве.)
  • Длины хранятся в «функциях» через declare function.
  • это ТикZ, поэтому нам нужно нарисовать различные грани в соответствующем порядке. Если вам это не нравится, переключитесь на asymptote.

Код и результат:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{perspective}
\begin{document}
\begin{tikzpicture}[>=stealth,semithick,line cap=round,
    declare function={R=20;d=9;dd=1.5;rr=5;L=10;l=1;},%<- d/2efine some lengths
    scale=0.15]
 \begin{scope}[3d view={30}{10}]%<- install 3d view and set view angles
  \path[fill=gray!80] plot[variable=\t,domain=60:110,smooth] 
     ({R*cos(\t)},{d/2},{R*sin(\t)})
   --   plot[variable=\t,domain=110:60,smooth] 
     ({R*cos(\t)},{-d/2},{R*sin(\t)}) -- cycle;
  \path[fill=gray!40] plot[variable=\t,domain=120:240,smooth] 
     ({R*cos(\t)},{-d/2},{R*sin(\t)}) 
      --   plot[variable=\t,domain=240:120,smooth] 
     ({rr*cos(\t)},{-d/2},{rr*sin(\t)}) --cycle;
  \path[fill=black]  plot[variable=\t,domain=120:240,smooth] 
     ({rr*cos(\t)},{-d/2},{rr*sin(\t)})
     -- ({rr*cos(240)},{d/2},{rr*sin(240)}) 
     -- ({(rr+dd)*cos(240)},{d/2},{(rr+dd)*sin(240)})
   -- plot[variable=\t,domain=240:120,smooth] 
     ({(rr+dd)*cos(\t)},{-d/2},{(rr+dd)*sin(\t)}) -- cycle;     
  \path[fill=brown!40] plot[variable=\t,domain=120:60,smooth] 
     ({rr*cos(\t)},{d/2+l},{rr*sin(\t)}) --
     plot[variable=\t,domain=60:120,smooth] 
     ({rr*cos(\t)},{-d/2-L},{rr*sin(\t)}) --
     cycle;  
  \path[fill=gray!40] plot[variable=\t,domain=60:120,smooth] 
     ({R*cos(\t)},{-d/2},{R*sin(\t)}) 
      --   plot[variable=\t,domain=120:60,smooth] 
     ({rr*cos(\t)},{-d/2},{rr*sin(\t)}) --cycle;
  \path[fill=black]  plot[variable=\t,domain=120:60,smooth] 
     ({rr*cos(\t)},{-d/2},{rr*sin(\t)})
     -- ({rr*cos(60)},{d/2},{rr*sin(60)})   
     -- ({(rr+dd)*cos(60)},{d/2},{(rr+dd)*sin(60)})
   -- plot[variable=\t,domain=60:120,smooth] 
     ({(rr+dd)*cos(\t)},{-d/2},{(rr+dd)*sin(\t)}) -- cycle;     
  \path[fill=gray!60]    
    ({(rr+dd)*cos(60)},{-d/2},{(rr+dd)*sin(60)}) 
    -- ({(rr+dd)*cos(60)},{d/2},{(rr+dd)*sin(60)})
    -- ({R*cos(60)},{d/2},{R*sin(60)})
    -- ({R*cos(60)},{-d/2},{R*sin(60)}) -- cycle;
  \path[fill=brown!60] plot[variable=\t,domain=240:60,smooth] 
     ({rr*cos(\t)},{-d/2-L},{rr*sin(\t)}) --cycle;   
  \path[fill=brown] 
     ({rr*cos(240)},{-d/2-L},{rr*sin(240)}) 
     -- ({rr*cos(60)},{-d/2-L},{rr*sin(60)}) 
     -- ({rr*cos(60)},{d/2+l},{rr*sin(60)}) 
     -- ({rr*cos(240)},{d/2+l},{rr*sin(240)}) 
     --cycle;    
  \path[fill=gray!60]    
    ({(rr+dd)*cos(240)},{-d/2},{(rr+dd)*sin(240)}) 
    -- ({(rr+dd)*cos(240)},{d/2},{(rr+dd)*sin(240)})
    -- ({R*cos(240)},{d/2},{R*sin(240)})
    -- ({R*cos(240)},{-d/2},{R*sin(240)}) -- cycle;
 \end{scope}  
 %
 \begin{scope}[xshift=35cm]
  \draw (-d/2,-R) rectangle (d/2,-rr-dd) (-d/2,R) rectangle (d/2,rr+dd)
   (-d/2-L,-rr) rectangle (d/2+l,rr);
  \draw[fill] (-d/2,-rr) rectangle (d/2,-rr-dd)
  (-d/2,rr) rectangle (d/2,rr+dd);
  \draw[dashed] (d/2,R) -- ++ (5,0) coordinate (rt)
     (d/2,-R) -- ++ (5,0) coordinate (rb);
  \draw[<->] (rt) -- (rb) node[midway,rotate=90,anchor=north]
     {\pgfmathparse{2*R}\pgfmathprintnumber\pgfmathresult\,mm};
  \draw[<->] (-d/2,R+1) --  (d/2,R+1) node[midway,rotate=90,anchor=west]
  {\pgfmathparse{d}\pgfmathprintnumber\pgfmathresult\,mm};
 \end{scope}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Связанный контент