Basierend auf meiner Frage hierWie zeichnet man einen gestrichelten Kreisbogen hinter einer Pyramide?
Ich habe es versucht
\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}
Wie kann ich die Kreislinie dieses Bildes vollständig darstellen?
Antwort1
reverseclip
Dies liegt daran, dass die Größe des von Ihnen verwendeten Kreises current bounding box
nicht ausreicht, um einen Kreis mit der Linienbreite darzustellen, die Sie zeichnen möchten. In Ihrem Bild besteht die vielleicht einfachste Lösung darin, die Beschriftungen vor dem Zeichnen des Kreises zu zeichnen.
\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}
Antwort2
Ausführen mit 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}