Muszę zrobić bardzo prosty stożek z h i r (jak na zdjęciu, które przesłałem jako przykład) i nie mogę go znaleźć w poprzednim pytań.
Komentarze
- Powiązane pytanie: TikZ: odwrócony stożek .
- Dlaczego żadna odpowiedź nie jest akceptowana?
Odpowiedź
Z arc
\documentclass[tikz,border=10pt]{standalone} \usetikzlibrary{calc} \begin{document} \begin{tikzpicture} \draw[dashed] (0,0) arc (170:10:2cm and 0.4cm)coordinate[pos=0] (a); \draw (0,0) arc (-170:-10:2cm and 0.4cm)coordinate (b); \draw[densely dashed] ([yshift=4cm]$(a)!0.5!(b)$) -- node[right,font=\footnotesize] {$h$}coordinate[pos=0.95] (aa)($(a)!0.5!(b)$) -- node[above,font=\footnotesize] {$r$}coordinate[pos=0.1] (bb) (b); \draw (aa) -| (bb); \draw (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b); \end{tikzpicture} \end{document}
Z ellipse
\documentclass[tikz,border=10pt]{standalone} \usetikzlibrary{calc} \begin{document} \begin{tikzpicture} \begin{scope} \clip (-2,0) rectangle (2,1cm); \draw[dashed] (0,0) circle(2cm and 0.35cm); \end{scope} \begin{scope} \clip (-2,0) rectangle (2,-1cm); \draw (0,0) circle(2cm and 0.35cm); \end{scope} \draw[densely dashed] (0,4) -- node[right,font=\footnotesize] {$h$}coordinate[pos=0.95] (aa)(0,0) -- node[above,font=\footnotesize] {$r$}coordinate[pos=0.1] (bb) (2,0); \draw (aa) -| (bb); \draw (-2,0) -- (0,4) -- (2,0); \end{tikzpicture} \end{document}
Gonzalo uprzejmie dostarczył cienie do cylindra i odtwarzam jego kod (z podziękowaniami):
\documentclass{article} \usepackage{tikz} \usetikzlibrary{shadings} \begin{document} \begin{tikzpicture} \fill[ top color=gray!50, bottom color=gray!10, shading=axis, opacity=0.25 ] (0,0) circle (2cm and 0.5cm); \fill[ left color=gray!50!black, right color=gray!50!black, middle color=gray!50, shading=axis, opacity=0.25 ] (2,0) -- (0,6) -- (-2,0) arc (180:360:2cm and 0.5cm); \draw (-2,0) arc (180:360:2cm and 0.5cm) -- (0,6) -- cycle; \draw[dashed] (-2,0) arc (180:0:2cm and 0.5cm); \draw[dashed] (2,0) -- node[below] {$r$} (0,0) -- node[left] {h} (0,6) ; \draw (0,8pt) -- ++(8pt,0) -- (8pt,0); \end{tikzpicture} \end{document}
Komentarze
- Ponieważ odpowiedziałeś podając dwie opcje, być może mógłbyś dodać nowy opcja z cieniami jak w mojej odpowiedzi? Nie widzę sensu w podawaniu prawie tego samego kodu w dwóch różnych odpowiedziach.
- @GonzaloMedina Dzięki i użyłem twojego kodu jako takiego, ponieważ uważałem, że jest dobry. dziękuję.
- U podstawy wystąpił nieprzyjemny błąd, ponieważ boki powinny być styczne do dolnej elipsy, aw tym przypadku tak nie jest. Rysowanie większego problemu staje się większe.
Odpowiedź
Do tego potrzebny jest matematyk. Musisz obliczyć punkty styczności, a następnie połączyć wierzchołek stożka z tymi punktami, a nie z końcami głównej osi. Jeśli elipsa ma swoją główną oś od (-a,0)
do (a,0)
, jej mniejsza oś od (0,-b)
do (b,0)
, a jego wierzchołek w (0,h)
(z h>b
), a następnie jeden punkt styczność jest (a*sqrt(1-(b/h)^2), b*(b/h))
, a druga jest taka sama, ale z zanegowaną współrzędną x.
Oto kod MetaPost, aby poprawnie narysować stożek:
beginfig(1) a:=2in; b:=.5in; h:= 3in; % for example draw fullcircle xscaled 2a yscaled 2b; % a x b ellipse pair Z[]; Z2 := (0,h); % vertex Z1 := (a*sqrt(1 - (b/h)*(b/h)),b*(b/h)); % right tangency Z3 := (-xpart Z1, ypart Z1); % left tangency draw Z1--Z2--Z3; endfig; end
Nie używam TikZ, więc w razie potrzeby pozwolę innym zapewnić tłumaczenie. (I uwzględnij przerywane fragmenty).
Odpowiedź
Rozwiązanie Dana przetłumaczone na TikZ
:
\documentclass[tikz,border=2mm]{standalone} \usetikzlibrary{positioning, calc} \begin{document} \begin{tikzpicture} \newcommand{\radiusx}{2} \newcommand{\radiusy}{.5} \newcommand{\height}{6} \coordinate (a) at (-{\radiusx*sqrt(1-(\radiusy/\height)*(\radiusy/\height))},{\radiusy*(\radiusy/\height)}); \coordinate (b) at ({\radiusx*sqrt(1-(\radiusy/\height)*(\radiusy/\height))},{\radiusy*(\radiusy/\height)}); \draw[fill=gray!30] (a)--(0,\height)--(b)--cycle; \fill[gray!50] circle (\radiusx{} and \radiusy); \begin{scope} \clip ([xshift=-2mm]a) rectangle ($(b)+(1mm,-2*\radiusy)$); \draw circle (\radiusx{} and \radiusy); \end{scope} \begin{scope} \clip ([xshift=-2mm]a) rectangle ($(b)+(1mm,2*\radiusy)$); \draw[dashed] circle (\radiusx{} and \radiusy); \end{scope} \draw[dashed] (0,\height)|-(\radiusx,0) node[right, pos=.25]{$h$} node[above,pos=.75]{$r$}; \draw (0,.15)-|(.15,0); \end{tikzpicture} \end{document}
Odpowiedź
Dla zabawy z PSTricks.
\documentclass[pstricks,border=12pt,12pt]{standalone} \usepackage{pst-node} \begin{document} \begin{pspicture}[dimen=m](8,10) \psellipticarc[linestyle=dashed](4,1)(4,.65){0}{180} \psellipticarcn(4,1)(4,.65){0}{180} \psline[linecap=0](0,1)(4,10)(8,1) \pcline[linestyle=dashed](4,10)(4,1)\naput{$h$} \pcline[linestyle=dashed](4,1)(8,1)\naput{$r$} \rput(4,1){\psline(0,9pt)(9pt,9pt)(9pt,0)} \end{pspicture} \end{document}
Komentarze
- U podstawy wystąpił nieprzyjemny błąd, ponieważ boki powinny być styczne do dolnej elipsy iw tym jeśli tak nie jest. Rysowanie większego problemu staje się większe.
Odpowiedź
Przyjechałem tutaj, szukając sposobu na narysowanie stożek świetlny w TikZ, więc oto ten, który utworzyłem, używając odpowiedzi Dana:
\documentclass[tikz]{standalone} \begin{document} \begin{tikzpicture} \def\b{0.2} % semi-minor axis \pgfmathsetmacro{\h}{(1 + sqrt(1 + 4*\b^2)) / 2} \pgfmathsetmacro{\a}{sqrt(\h)} \draw (-1, -1) -- (1, 1); \draw (-1, 1) -- (1, -1); \draw (0, \h) ellipse [x radius = \a, y radius = \b]; \draw (0, -\h) ellipse [x radius = \a, y radius = \b]; \end{tikzpicture} \end{document}