- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 8 anni, 5 mesi fa da .
-
Topic
-
Dovendo trattare dell’ottica legata all’arcobaleno, mi trovo a riprodurre con Tikz una figura simile a questa:
https://it.wikipedia.org/wiki/Arcobaleno#/media/File:Rainbowrays.pngCon ricerche e (poca) fantasia ho tirato fuori il seguente codice:
`\documentclass{article}
\usepackage{tikz}\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{10pt}\usetikzlibrary{calc,decorations.markings}
\begin{document}
\begin{tikzpicture}[xscale=-1]
% raggio della goccia
\pgfmathsetlengthmacro{\r}{3cm}%\pgfmathsetlengthmacro{\f}{.7}
% per ogni raggio incidente a varie altezze si disegna il percorso interno e in uscita
\foreach \f in {0.01, 0.02, …, 1} {% calcolo del raggio di incidenza
\pgfmathsetmacro{\incidentangle}{asin(\f)};% coordinate dell'origine e del punto di ingresso
\coordinate (O) at (0,0);
\coordinate (A) at (\incidentangle:\r);% disegno della goccia e del raggio incidente
\draw (O) circle (\r);
\draw (A -| \r*2, 0) — (A);% calcolo dell'angolo di rifrazione
\pgfmathsetmacro{\refractedangle}{asin(sin(\incidentangle) / 1.33)}% calcola l'angolo al vertice (in O) del triangolo formato da O, dal punto di entrata e da quello di riflessione interna
\pgfmathsetmacro{\angleindrop}{180 – 2*\refractedangle}% coordinate del punto di riflessione
\coordinate (A') at (\incidentangle+\angleindrop:\r);
% coordinate del punto di uscita
\coordinate (A'') at (\incidentangle+2*\angleindrop:\r);\begin{scope}[opacity=.5]
% disegno dei raggi luminosi
\draw (A) — (A');
\draw (A') — (A'');
\draw (A'') — ($(A'')+(2*\incidentangle+2*\angleindrop:\r)$);
\end{scope}
}\end{tikzpicture}
\end{document}`
il quale compila e rende bene l’idea.
L’unica cosa, vorrei che i raggi in uscita siano limitati in una zona rettangolare come nel link. Per farlo dovrei modificare in qualche modo `\draw (A'') — ($(A'')+(2*\incidentangle+2*\angleindrop:\r)$);`, ma non ho idea di come si faccia…Vi ringrazio in anticipo
- Devi essere connesso per rispondere a questo topic.