我想知道是否有人知道如何将一个 tikz 图片锥面放置在水平位置的另一个 tikz 图片锥面。
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\usepackage{amssymb}
\usetikzlibrary{shadings}
\begin{document}
\begin{tikzpicture}
\fill[top color=gray!50!black,bottom color=gray!10,middle color=gray,shading=axis,opacity=0.25] (0,0) circle (3cm and 0.5cm);
\fill[left color=gray!50!black,right color=gray!50!black,middle color=gray!50,shading=axis,opacity=0.25] (3,0) -- (0,6) -- (-3,0) arc (180:360:3cm and 0.5cm);
\draw (-3,0) arc (180:360:3cm and 0.5cm) -- (0,6) -- cycle;
\draw[densely dashed] (-3,0) arc (180:0:3cm and 0.5cm);
\end{tikzpicture}
\end{document}
答案1
TiKZ 3.0.0(已在CTAN
)引入了一个新概念调用pic
“pic” 是一张“短图片”(因此得名...),可以插入 TikZ 图片中的任何位置,您也可以在其中插入节点。与节点类似,pic 具有某人定义的“形状”(称为类型以避免混淆)。每次使用指定类型的 pic 时,都会执行该类型的代码,从而将一些绘图添加到当前图片中。添加节点和将 pic 添加到图片的语法也非常相似。核心区别在于,pic 通常比节点更复杂,可能由一大堆节点本身以及连接它们的复杂路径组成。
使用“图片”可以轻松移动、旋转、镜像……您的每幅画作。接下来有两个示例:
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shadings}
\tikzset{
cone/.pic={
\fill[top color=gray!50!black, bottom color=gray!10,
middle color=gray,shading=axis,opacity=0.25]
(0,0) circle (3cm and 0.5cm);
\fill[left color=gray!50!black, right color=gray!50!black,
middle color=gray!50,shading=axis,opacity=0.25]
(3,0) -- (0,6) -- (-3,0) arc (180:360:3cm and 0.5cm);
\draw (-3,0) arc (180:360:3cm and 0.5cm) -- (0,6) -- cycle;
\draw[densely dashed] (-3,0) arc (180:0:3cm and 0.5cm);
},
cone_inverted/.pic={
\fill[top color=gray!50!black, bottom color=gray!10,
middle color=gray, shading=axis, opacity=0.25]
(0,-6) circle (3cm and 0.5cm);
\fill[left color=gray!50!black, right color=gray!50!black,
middle color=gray!50, shading=axis, opacity=0.25]
(3,-6) -- (0,0) -- (-3,-6) arc (180:360:3cm and 0.5cm);
\draw (-3,-6) arc (180:360:3cm and 0.5cm) -- (0,0) -- cycle;
\draw[densely dashed] (-3,-6) arc (180:0:3cm and 0.5cm);
}
}
\begin{document}
\begin{tikzpicture}
\path (0,0) pic {cone} pic [rotate=180] {cone};
\end{tikzpicture}
\begin{tikzpicture}
\foreach \i in {0,60,...,360}
\path (0,0) pic [rotate=\i] {cone_inverted};
\end{tikzpicture}
\end{document}
答案2
解决方案由哈里什·库马尔在我们可以在 tikz 中镜像一部分吗?正如 Torbjørn 所建议的,这很容易实现
如果这是你想要的,代码是:
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{amssymb}
\usetikzlibrary{shadings}
\begin{document}
\begin{tikzpicture}
\fill[top color=gray!50!black,bottom color=gray!10,middle color=gray,shading=axis,opacity=0.25] (0,0) circle (3cm and 0.5cm);
\fill[left color=gray!50!black,right color=gray!50!black,middle color=gray!50,shading=axis,opacity=0.25] (3,0) -- (0,6) -- (-3,0) arc (180:360:3cm and 0.5cm);
\draw (-3,0) arc (180:360:3cm and 0.5cm) -- (0,6) -- cycle;
\draw[densely dashed] (-3,0) arc (180:0:3cm and 0.5cm);
\begin{scope}[xscale=1,yscale=-1]
\fill[top color=gray!50!black,bottom color=gray!10,middle color=gray,shading=axis,opacity=0.25] (0,0) circle (3cm and 0.5cm);
\fill[left color=gray!50!black,right color=gray!50!black,middle color=gray!50,shading=axis,opacity=0.25] (3,0) -- (0,6) -- (-3,0) arc (180:360:3cm and 0.5cm);
\draw (-3,0) arc (180:360:3cm and 0.5cm) -- (0,6) -- cycle;
\draw[densely dashed] (-3,0) arc (180:0:3cm and 0.5cm);
\end{scope}
\end{tikzpicture}
\end{document}