这是一个不太好的解答,但提供了一个倾斜椭圆绘制的轮子...
要想更方便地仅通过椭圆的「长轴端点」和「离心率」来控制「倾斜」的椭圆,我正好在这里有一个类似的封装为\mydrawellipse:
稍微调整了一下:
\documentclass[tikz,border=2pt]{standalone}
\usepackage{tkz-euclide}
\NewDocumentCommand{\mydrawellipse}{O{}O{}mmm}{%
% #3=pointA; #4=pointB; #5=ratio of y on x
\tkzCalcLength(#3,#4)%
\tkzGetLength{tmpdistance}%
\tkzFindSlopeAngle(#3,#4) %
\tkzGetAngle{tmpangle}%
\begin{scope}[rotate=\tmpangle]
\draw[densely dashed,#1] (#4) arc [start angle=0,delta angle=180,
x radius=\fpeval{\tmpdistance/2} cm,y radius=\fpeval
{\tmpdistance * (#5) / 2}cm] (#3);
\draw[#2] (#3) arc[start angle=180,delta angle=180,x
radius=\fpeval{\tmpdistance/2} cm,y radius=\fpeval{\tmpdistance
* (#5) / 2}cm] (#4);
\end{scope}
}
\begin{document}
\begin{tikzpicture}[line join=round]
\def\radius{1}
\def\height{4}
\def\leftheight{1.5}
\def\rightheight{3}
\tkzDefPoint(-\radius,0){A}
\tkzDefPoint(\radius,0){B}
\tkzDefPoint(-\radius,\leftheight){C}
\tkzDefPoint(\radius,\rightheight){D}
\mydrawellipse{A}{B}{.2}
\mydrawellipse[solid]{C}{D}{.18}
\def\myshifta{.004}
\def\myshiftb{.003}
\tkzDefPoint(-\radius-\myshifta,0){A'}
\tkzDefPoint(\radius+\myshiftb,0){B'}
\tkzDefPoint(-\radius-\myshifta,\leftheight){C'}
\tkzDefPoint(\radius+\myshiftb+.003,\rightheight-.01){D'}
\tkzDrawSegments[line width=.4pt](A',C' B',D')
\end{tikzpicture}
\end{document}但是,由于数学上的原因,「直接以母线上的点作为长轴顶点」的话,椭圆与圆柱的母线必不是相切的。OP提到的「这里的x radius和y radius怎么调都调不好...」正是由于此,客观来看,上面代码中的
\def\myshifta{.004}
\def\myshiftb{.003}
\tkzDefPoint(-\radius-\myshifta,0){A'}
\tkzDefPoint(\radius+\myshiftb,0){B'}
\tkzDefPoint(-\radius-\myshifta,\leftheight){C'}
\tkzDefPoint(\radius+\myshiftb+.003,\rightheight-.01){D'}
\tkzDrawSegments[line width=.4pt](A',C' B',D')纯属气急败坏的无奈之举,局部的微调精细效果也并不够完美。






















问 如何绘制斜截的圆柱,要求倾斜的椭圆截面与圆柱的母线精确相切?