Ik moet een heel eenvoudige kegel maken met h en r (zoals de afbeelding die ik als voorbeeld heb geüpload) en ik kan het niet vinden in de vorige vragen.
Opmerkingen
- Gerelateerde vraag: TikZ: omgekeerde kegel .
- Waarom wordt geen antwoord geaccepteerd?
Antwoord
Met 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}
Met 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 heeft vriendelijk de arcering aan de cilinder geleverd en ik reproduceer zijn code (met dank):
\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}
Reacties
- Aangezien je hebt geantwoord met twee opties, zou je misschien een nieuw optie met arcering zoals in mijn antwoord? Het heeft geen zin om bijna dezelfde code in twee verschillende antwoorden te geven.
- @GonzaloMedina Bedankt en ik heb je code als zodanig gebruikt omdat ik vond dat hij goed was. dank je.
- Er is een onaangename fout aan de basis, aangezien de zijkanten de onderste ellips zouden moeten raken en in dit geval niet. Als je een groter tekent, wordt het probleem groter.
Antwoord
Dit vereist een wiskundige. U moet de raakpunten berekenen en vervolgens de top van de kegel verbinden met die punten, niet met de uiteinden van de hoofdas. Als de ellips zijn hoofdas heeft van (-a,0)
tot (a,0)
, dan is de secundaire as van (0,-b)
naar (b,0)
, en zijn hoekpunt op (0,h)
(met h>b
), en vervolgens een punt van tangency is (a*sqrt(1-(b/h)^2), b*(b/h))
en de andere is hetzelfde maar met zijn x-coördinaat genegeerd.
Hier is de MetaPost-code om de kegel correct te tekenen:
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
Ik gebruik TikZ niet, dus ik laat anderen indien nodig een vertaling leveren. (En voorzie de onderbroken gedeelten.)
Answer
Dan “s oplossing vertaald naar 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}
Antwoord
Gewoon voor de lol met 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}
Reacties
- Er zit een onaangename fout aan de basis, aangezien de zijkanten de onderste ellips zouden moeten raken en hierin als ze dat niet zijn. Als je een groter tekent, wordt het probleem groter.
Antwoord
Ik kwam hier aan op zoek naar een manier om een lichtkegel in TikZ, dus hier is degene die ik heb gemaakt met het antwoord van Dan:
\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}