Измените ориентацию спирали на этом 3D-изображении Tikz

Измените ориентацию спирали на этом 3D-изображении Tikz

Я пытаюсь создать «3D» изображение, используя разные углы обзора в Tikz (см.МВЭниже). Изображение, которое я создал, можно увидеть наэта ссылка.

Моя проблема в том, что созданная мной спираль не выровнена с черной осью. В частности, ось вращения синей спирали должна проходить вокруг черной линии (не обязательно по всей длине черной оси).

Спираль представляет собой циркулярно поляризованный свет, продемонстрированныйздесьот @MarkWibrow. Как мне выровнять спираль так, чтобы она вращалась вокруг оси, показанной черной линией? Решение, кажется, дано вэта почта, но мне не удалось объединить его здесь.

Кроме того, как можно уменьшить амплитуду спиралей (т.е. уменьшить окружности)?

МВЭ

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

решение1

Я изменил вашу систему координат на правую.

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

3D-коробка и спираль вокруг оси

Спираль идет от -12до -1, имеет радиус 0.5и 8контролирует количество витков.

Связанный контент