Devo fare un cono molto semplice con he r (come limmagine che ho caricato come esempio) e non riesco a trovarlo nel precedente domande.

Cono semplice

Commenti

Risposta

Con 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} 

inserisci qui la descrizione dellimmagine

Con 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} 

inserisci qui la descrizione dellimmagine

Gonzalo ha gentilmente fornito le ombreggiature al cilindro e sto riproducendo il suo codice (con ringraziamenti):

\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} 

inserisci qui la descrizione dellimmagine

Commenti

  • Dato che hai risposto fornendo due opzioni, forse potresti aggiungerne una nuova opzione con sfumature come nella mia risposta? Non vedo motivo di dare quasi lo stesso codice in due risposte diverse.
  • @GonzaloMedina Grazie e ho usato il tuo codice così come ho sentito che è buono. grazie.
  • Cè uno spiacevole errore alla base poiché i lati dovrebbero essere tangenti allellisse inferiore e in questo caso non lo sono. Disegnando un disegno più grande, il problema diventa più grande.

Risposta

Ciò richiede un matematico. È necessario calcolare i punti di tangenza e quindi collegare il vertice del cono a quei punti, non alle estremità dellasse maggiore. Se lellisse ha il suo asse maggiore da (-a,0) a (a,0), il suo asse minore da (0,-b) a (b,0) e il suo vertice in (0,h) (con h>b), quindi un punto di la tangenza è (a*sqrt(1-(b/h)^2), b*(b/h)) e laltra è la stessa ma con la sua coordinata x negata.

Ecco il codice MetaPost per disegnare correttamente il cono:

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 

Non uso TikZ, quindi lascerò che altri forniscano una traduzione se necessario (e fornisco le parti tratteggiate)

Risposta

Soluzione di Dan tradotta in 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} 

inserisci qui la descrizione dellimmagine

Risposta

Solo per divertimento con 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} 

inserisci la descrizione dellimmagine iption here

Commenti

  • Cè uno spiacevole errore alla base poiché i lati dovrebbero essere tangenti allellisse inferiore e in questo caso non lo siano. Disegnando un disegno più grande, il problema diventa più grande.

Risposta

Sono arrivato qui cercando un modo per disegnare un cono di luce in TikZ, quindi ecco quello che ho creato utilizzando la risposta di 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} 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *