
Ich versuche, ein 3D-Bild mit verschiedenen Blickwinkeln in Tikz zu erstellen (sieheMWEunten). Das von mir erstellte Bild finden Sie unterdieser Link.
Mein Problem ist, dass die von mir erstellte Spirale nicht mit der schwarzen Achse ausgerichtet ist. Genauer gesagt sollte die Rotationsachse der blauen Spirale um die schwarze Linie herum verlaufen (nicht unbedingt entlang der gesamten Länge der schwarzen Achse).
Die Spirale stellt zirkular polarisiertes Licht dar, demonstriertHiervon @MarkWibrow. Wie kann ich die Spirale so ausrichten, dass sie sich um die mit der schwarzen Linie angezeigte Achse dreht? Eine Lösung scheint indieser Beitrag, aber ich konnte es hier nicht zusammenführen.
Und wie kann ich die Amplitude der Spiralen reduzieren (also kleinere Kreise erzeugen)?
MWE
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{3d, shapes.multipart, angles, quotes}
\tikzset{axis/.style={black, very thick, ->}}
\newcommand{\rect}[1]{%
\begin{scope}[canvas is xz plane at y=1.2]
\draw[line join=round, thick, fill=green!50!black!40] (#1,-1.2) rectangle (#1+1.2,1.2);
\end{scope}
%
\begin{scope}[canvas is xy plane at z=1.2]
\draw[line join=round, thick, fill=green!50!black!25](#1,-1.2) rectangle (#1+1.2,1.2);
\end{scope}
%
\begin{scope}[canvas is yz plane at x=#1]
\draw[line join=round, thick, fill=green!50!black!10] (-1.2,-1.2) rectangle (1.2,1.2);
\end{scope}
}
\begin{document}
\pgfdeclarelayer{layer1}
\pgfdeclarelayer{layer2}
\pgfdeclarelayer{layer3}
\pgfdeclarelayer{layer4}
\pgfdeclarelayer{layer5}
\pgfdeclarelayer{layer6}
\pgfdeclarelayer{layer7}
\pgfdeclarelayer{layer8}
\pgfsetlayers{main, layer8, layer7, layer6, layer5, layer4, layer3, layer2, layer1}
\begin{tikzpicture}[x={(1cm,0.4cm)}, y={(8mm, -3mm)}, z={(0cm,1cm)}, line cap=round, line join=round]
\draw[axis] (-1,0,0) -- (15,0,0);
\begin{pgfonlayer}{layer8}
\rect{14}
\end{pgfonlayer}
\begin{pgfonlayer}{layer8}
\draw[very thick] (13,0,0) -- (14,0,0);
\end{pgfonlayer}
\tikzset{%
xyz path/.style args={\x=#1; \y=#2; \z=#3; (#4)}{
insert path={
\foreach \step [evaluate={\x=#1; \y=#2; \z=#3;}] in {#4}{
-- (\x, \y, \z) }
}
},
cosine path/.style args={#1:#2}{
xyz path={\x=cos(\step); \y=0; \z=\step/360; (#1, 2, ..., #2)},
insert path={ coordinate (cosine path end) }
},
sine path/.style args={#1:#2}{
xyz path={\x=0; \y=sin(\step); \z=\step/360; (#1, 2, ..., #2)},
insert path={ coordinate (sine path end) }
},
spiral path/.style args={#1:#2}{
xyz path={\x=cos(\step); \y=sin(\step); \z=\step/360; (#1, 2, ..., #2)},
insert path={ coordinate (spiral path end) }
},
marker/.style={
insert path={
node [fill, circle, inner sep=0pt, minimum size=#1] {}
}
}
}
\def\lastangle{15}
\def\cycles{4}
\foreach \cycle in {0,...,\cycles}{
\tikzset{shift={(0, 0, \cycle)}}
\ifnum\cycle=\cycles
\let\endangle=\lastangle
\else
\def\endangle{360}
\fi
\draw [transform shape, blue, very thick] (1, 0, 0) [spiral path={0:\endangle}];
}
\end{tikzpicture}
\end{document}
Antwort1
Ich habe Ihr Koordinatensystem so geändert, dass es rechtshändig ist.
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[x={(-1cm,-0.4cm)}, y={(0.8cm, -0.3cm)}, z={(0cm,1cm)}, line join=round]
\draw[canvas is xz plane at y=1.2, thick, fill=green!50!black!40] (-14,-1.2) rectangle (-15.2,1.2);
\draw[canvas is xy plane at z=1.2, thick, fill=green!50!black!25] (-14,-1.2) rectangle (-15.2,1.2);
\draw[canvas is yz plane at x=-14, thick, fill=green!50!black!10] (-1.2,-1.2) rectangle (1.2,1.2);
\draw[very thick, ->] (-14,0,0) -- (0,0,0);
\draw[blue, very thick] plot[domain=-12:-1, samples=200, smooth, variable=\t] (\t,{0.5*cos(8*\t r)},{0.5*sin(8*\t r)});
\end{tikzpicture}
\end{document}
Die Spirale geht von -12
bis -1
, hat einen Radius von 0.5
und 8
steuert die Anzahl der Windungen.