이 3D tikz 이미지에서 나선형 방향 변경

이 3D tikz 이미지에서 나선형 방향 변경

Tikz에서 다양한 시야각을 사용하여 '3D' 이미지를 만들려고 합니다.MWE아래에). 내가 만든 이미지는 다음에서 볼 수 있습니다.이 링크.

내 문제는 내가 만든 나선형이 검은색 축과 정렬되지 않는다는 것입니다. 특히 파란색 나선의 회전축은 검은색 선을 중심으로 이루어져야 합니다(검은색 축의 전체 길이를 따라야 할 필요는 없음).

나선형은 원형 편광을 나타냅니다.여기@MarkWibrow로. 검은 선으로 표시된 축을 중심으로 회전하도록 나선형을 정렬하려면 어떻게 해야 합니까? 해결책은 다음과 같습니다.이 게시물, 하지만 여기서 병합할 수는 없습니다.

또한 나선(예: 작은 원)의 진폭을 어떻게 줄일 수 있나요?

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}

답변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반경 -10.5이고 8회전 수를 제어합니다.

관련 정보