Basado en mi pregunta aquí¿Cómo dibujar un arco discontinuo de un círculo detrás de una pirámide?
Lo intenté
\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}
¿Cómo puedo obtener la línea completa del círculo de esta imagen?
Respuesta1
Esto sucede porque en el momento que estás usando reverseclip
el current bounding box
no es lo suficientemente grande como para que quepa un círculo con el ancho de línea que vas a dibujar. En su imagen, la solución quizás más sencilla es dibujar las etiquetas antes de dibujar el círculo.
\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}
Respuesta2
Corre con 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}