根据我在这里的问题如何在金字塔后面绘制圆的虚线弧?
我试过
\documentclass[border=2 mm,12pt,tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usepackage{tkz-euclide}
\usetikzlibrary{intersections,calc,backgrounds}
\usepackage{fouriernc}
\tikzset{reverseclip/.style={insert path={(current bounding box.south west)rectangle
(current bounding box.north east)} }}
\begin{document}
\tdplotsetmaincoords{70}{290}
\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round]
\pgfmathsetmacro\a{4*sqrt(2)/2}
\pgfmathsetmacro\h{2*\a*sqrt(2)/2}
% definitions
\path
coordinate (O) at (0,0,0)
coordinate(A) at (\a,0,0)
coordinate (B) at (0,\a,0)
coordinate (C) at (-\a,0,0)
coordinate (D) at (0,-\a,0)
coordinate (S) at (0,0,\h)
;
\draw [thick] (S) -- (B) -- (C) -- cycle;
\draw [thick] (S) -- (C) -- (D) -- cycle;
\draw[dashed,thick]
(A) -- (B) (A) -- (C) (B) -- (D) (S)--(A) (A)--(D) (S)--(O);
\begin{scope}
\path (O) circle ({\a});
\clip (S) -- (B) -- (C) -- (D) -- cycle [reverseclip];
\draw[very thick] (O) circle ({\a});
\end{scope}
\begin{scope}
\clip (S) -- (B) -- (C) -- (D) -- cycle;
\draw[dashed] (O) circle ({\a});
\end{scope}
\foreach \point/\position in {A/above,B/left,C/below,D/right,O/below,S/above}
{
\fill (\point) circle (1.8pt);
\node[\position=1.5pt] at (\point) {$\point$};
}
\end{tikzpicture}
\end{document}
我怎样才能获得该图片的完整圆线?
答案1
发生这种情况的原因是,您目前使用的reverseclip
线宽current bounding box
不够大,无法容纳您要绘制的圆。在您的图片中,最简单的解决方法可能是在绘制圆之前先绘制标签。
\documentclass[border=2 mm,12pt,tikz]{standalone}
\usepackage{tikz,tikz-3dplot}
\usepackage{tkz-euclide}
\usetikzlibrary{intersections,calc,backgrounds}
\usepackage{fouriernc}
\tikzset{reverseclip/.style={insert path={(current bounding box.south west)rectangle
(current bounding box.north east)} }}
\begin{document}
\tdplotsetmaincoords{70}{290}
\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round]
\pgfmathsetmacro\a{4*sqrt(2)/2}
\pgfmathsetmacro\h{2*\a*sqrt(2)/2}
% definitions
\path
coordinate (O) at (0,0,0)
coordinate(A) at (\a,0,0)
coordinate (B) at (0,\a,0)
coordinate (C) at (-\a,0,0)
coordinate (D) at (0,-\a,0)
coordinate (S) at (0,0,\h)
;
\draw [thick] (S) -- (B) -- (C) -- cycle;
\draw [thick] (S) -- (C) -- (D) -- cycle;
\draw[dashed,thick]
(A) -- (B) (A) -- (C) (B) -- (D) (S)--(A) (A)--(D) (S)--(O);
\foreach \point/\position in {A/above,B/left,C/below,D/right,O/below,S/above}
{
\fill (\point) circle (1.8pt);
\node[\position=1.5pt] at (\point) {$\point$};
}
\begin{scope}
\path(O) circle ({\a});
\clip (S) -- (B) -- (C) -- (D) -- cycle [reverseclip];
\draw[very thick] (O) circle ({\a});
\end{scope}
\begin{scope}
\clip (S) -- (B) -- (C) -- (D) -- cycle;
\draw[dashed] (O) circle ({\a});
\end{scope}
\end{tikzpicture}
\end{document}
答案2
运行xelatex
:
\documentclass[pstricks,border=15pt]{standalone}
\usepackage{pst-3dplot}%
\begin{document}
\begin{pspicture}[showgrid=false](-4,-2)(4,6)
\psset{Alpha=30,Beta=15}
\pstThreeDLine[arrows=*-*,linestyle=dashed](-2,-2,0)(0,0,5)
\pstThreeDLine[arrows=*-*](2,-2,0)(0,0,5)
\pstThreeDLine[arrows=*-*](-2,2,0)(0,0,5)
\pstThreeDLine[arrows=*-*](2,2,0)(0,0,5)
\pstThreeDLine(2,-2,0)(2,2,0)(-2,2,0)
\pstThreeDLine[linestyle=dashed](2,-2,0)(-2,-2,0)(-2,2,0)(2,-2,0)
\pstThreeDLine[linestyle=dashed](-2,-2,0)(2,2,0)
\pstThreeDLine[linestyle=dashed,arrows=*-](0,0,0)(0,0,5)
\pstThreeDEllipse[linestyle=dashed](0,0,0)(2,2,0)(-2,2,0)
\pstThreeDEllipse[beginAngle=-90,endAngle=140,linewidth=1.5pt](0,0,0)(2,2,0)(-2,2,0)
\pstThreeDPut(-2.4,-2.2,0.2){\large$A$}
\pstThreeDPut(2.2,-2.2,0.2){\large$B$}
\pstThreeDPut(2.4,2.2,-0.2){\large$C$}
\pstThreeDPut(-2.4,2.2,0.2){\large$D$}
\pstThreeDPut(-0.2,0,-0.2){\large$O$}
\pstThreeDPut(0,0,5.3){\large$S$}
\end{pspicture}
\end{document}