I am trying to draw an oblique cylinder, some thing like this

or

I tried
```
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{3dtools,calc}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=200,theta=70},
line cap=butt,line join=round,c/.style={circle,fill,inner sep=1pt},
declare function={r=3;h=4;}]
\pgfmathsetmacro{\sdtip}{screendepth(0,0,h)}
\pgfmathsetmacro{\aspectangle}{atan2(\sdtip,sqrt(h*h-\sdtip*\sdtip))}
\path (0,0,h) coordinate (-tip);
\pgfmathsetmacro{\myex}{TDunit("(0,0,1)x(nscreenx,nscreeny,nscreenz)")}%
\pgfmathsetmacro{\myey}{TDunit("(0,0,1)x(nscreenx,nscreeny,nscreenz)")}%
\pgfmathsetmacro{\sdtip}{screendepth(0,0,h)}
\path (0,0,{tan(\aspectangle)}) coordinate (-tmpex)
(\myey) coordinate (-tmpey);
\begin{scope}[x={(-tmpex)},y={(-tmpey)}]
\pgfmathsetmacro{\alphacrit}{acos(tan(\aspectangle)*r/h)}
\path[3d/hidden] (\alphacrit:r) arc[start angle=\alphacrit,end
angle=-\alphacrit,radius=r];
\path[3d/visible] (\alphacrit:r)
arc[start angle=\alphacrit,end angle=360-\alphacrit,radius=r]
;
\path
({r*cos(\alphacrit)},{r*sin(\alphacrit)},0) coordinate (A)
({r*cos(-\alphacrit)},{-r*sin(\alphacrit)},0) coordinate (B)
(0,0,h) coordinate (S)
[3d coordinate ={(T) = (A) - (B) + (-tip) }, 3d coordinate ={(O') = 0.5*(-tip) + 0.5*(T)}];
\draw (O') circle[radius = r] (B) -- (-tip) -- (T) -- (A);
\end{scope}
%\path foreach \p/\g in {A/90,B/0,S/0,T/0}{(\p)node[c]{}+(\g:2.5mm) node{$\p$}};
\end{tikzpicture}
\end{document}
```
I got

How to draw an oblique cylinder?This is a code that draws such an oblique cylinder. However, at this point the result is not fully rotatable.
```
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{3dtools,calc}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=00,theta=70},
line cap=butt,line join=round,c/.style={circle,fill,inner sep=1pt},
declare function={R=1.5;dx=1;h=3;}]
\path (0,0,0) coordinate (O) (dx,0,h) coordinate (O');
\pgfmathsetmacro{\myex}{TDunit("(0,0,1)x(nscreenx,nscreeny,nscreenz)")}%
\pgfmathsetmacro{\myey}{TDunit("(0,0,1)x(\myex)")}%
\path (0,0,1) coordinate (ez) (\myey) coordinate (ey) (\myex) coordinate (ex);
\pgfmathsetmacro{\sdtip}{screendepth(0,0,h)}
\pgfmathsetmacro{\aspectangle}{atan2(\sdtip,sqrt(h*h-\sdtip*\sdtip))}
\begin{scope}[x={(ex)},y={(ey)},z={(ez)}]
\pgfmathsetmacro{\alphacrit}{acos(tan(\aspectangle)*R/h)-90}
\draw[3d/hidden] (\alphacrit:R)
arc[start angle=\alphacrit,end angle=180+\alphacrit,radius=R];
\draw
% the following two lines are for the shading, if you comment them
% you will not get shading
let \p1=($(O')-(O)$),\n1={atan2(\y1,\x1)} in
[left color=red,right color=red,middle color=white,shading angle=\n1]
(\alphacrit:R) -- ($(O')+(\alphacrit:R)$)
arc[start angle=\alphacrit,end angle=-180+\alphacrit,radius=R]
-- (-180+\alphacrit:R)
arc[start angle=-180+\alphacrit,end angle=\alphacrit,radius=R] ;
\draw[3d/visible,fill=cyan] (O') circle[radius=R];
\end{scope}
\end{tikzpicture}
\end{document}
```
