我正在尝试学习使用该\newcommand
功能来生成不同大小的截头体,可能用虚线将截头体变成圆锥体。
这行代码不起作用 - 显然是使用参数的算术问题 - 我一直在用替代方法进行测试,看来是除法导致了问题。
%\draw[semithick] (-#3,#1) ellipse ( (#2)*(#3)/((#1)+(#2) ) and (#2)*(#3)/(3*( (#1)+(#2) ) ) );%
我的代码如下
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{amssymb}
\usetikzlibrary{math}
\newcommand{\Frustom}[3]{
\begin{tikzpicture}
\draw[dashed,color=gray] (0,0) arc (2:178:#3 and #3/5);
\draw[semithick] (-2*#3,0) -- (-#3,#1+#2);
\draw[semithick] (0,0) -- (-#3,#1+#2);
\draw[semithick] (0,0) arc (0:-180:#3 and #3/5);
%\draw[semithick] (-#3,#1) ellipse ( (#2)*(#3)/((#1)+(#2) ) and (#2)*(#3)/(3*( (#1)+(#2) ) ) );% right ellipse
\draw[semithick] (-#3,#1) ellipse ( #2*#3/9 and 12/27 ) ;
\end{tikzpicture}
} %
\begin{document}
\Frustom{6}{3}{4} %frustum height, cone height, base radius
\end{document}
答案1
欢迎来到 TeX.SX!以下作品:
\documentclass{article}
\usepackage{tikz}
\newcommand*{\Frustum}[3]{%
\begin{tikzpicture}
\draw[dashed,color=gray] (0,0) arc (2:178:#3 and #3/5);
\draw[semithick] (-2*#3,0) -- (-#3,#1+#2);
\draw[semithick] (0,0) -- (-#3,#1+#2);
\draw[semithick] (0,0) arc (0:-180:#3 and #3/5);
\pgfmathsetmacro{\radx}{(#2)*(#3) / ((#1)+(#2))}
\pgfmathsetmacro{\rady}{(#2)*(#3)/(3*( (#1)+(#2) ) )}
\draw[semithick] (-#3,#1) ellipse[x radius=\radx, y radius=\rady];
\end{tikzpicture}%
}
\begin{document}
\Frustum{6}{3}{4} % frustum height, cone height, base radius
\end{document}
如果你需要在 或 里面使用逗号\radx
(\rady
例如,如果你使用诸如 之类的函数atan2
),你需要使用括号来帮助 TikZ 解析器,如下所示:
\draw[semithick] (-#3,#1) ellipse[x radius={\radx},
y radius={\rady}];
否则,它将像逗号分隔命令的选项一样ellipse
。
注意:请注意命令中引入的空格\Frustum
,在 之前\begin{tikzpicture}
和之后\end{tikzpicture}
。查看我为了避免这种情况而添加的百分号(请务必阅读这如果你不知道这个故事)。如果你真的想开始一个新段落,我认为在它的定义中\Frustum
使用是更好的风格。\par