如何从 tikz 中生成的点绘制 3D 路径

如何从 tikz 中生成的点绘制 3D 路径

让我通过一个例子来具体说明:

下面的小代码画了一段螺旋线(比较丑)

 \documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz}

    \begin{document}

    \begin{tikzpicture}
                % axes
      \coordinate (O) at (0,0,0);
      \coordinate (X) at (3,0,0);
      \coordinate (Y) at (0,3,0);
      \coordinate (Z) at (0,0,3);

      \def\scl{3.29} % steps
      \foreach \t in {0,1,...,360}
      {
        \draw[line width=1pt,color=red, opacity=0.4, dashed] 
        ({cos(\t)},   {sin(\t)}, {\scl*\t/360})--({cos(\t+7)},{sin(\t +7)},
        {\scl*(\t+7)/360});
      }

                % draw axes
      \draw[-latex] (O) -- (X) node[anchor=west] {$X$};
      \draw[-latex] (O) -- (Y) node[anchor=west] {$Y$};
      \draw[-latex] (O) -- (Z) node[anchor=west] {$Z$};

    \end{tikzpicture}



    \end{document}

有没有办法将点保存在内存中并调用一些“pgfplots”指令来绘制它们?

让我澄清一下,我不想绘制螺旋线。我想绘制任何没有方程的东西,但它是我在 TiKz 中创建的一组点。

谢谢。


我发现我对此没有讲清楚,所以让我补充一些额外的信息。请查看以下链接三维球体中 A 点和 B 点之间的圆弧

最后一个图(截至目前)是一个有 5 个弧的球体。我在 TiKz 中计算了这些弧,计算它们的代码在帖子中。由于每个点都是用“node[]”绘制的,因此在我的计算机上需要 30 多秒才能处理。像这样的图通常需要 1 到 2 秒。原因是代码太高级,速度很慢。此外,我没有太多的筹码。我可以定义颜色和点密度,仅此而已,我想调用一个 TiKz 函数,在其中我可以定义许多属性。谢谢。

总之我想知道两个事实:

  1. 是否有像 C++(或 C)代码中的“数组”或“指针”?我可以在其中存储一组点?
  2. TiKz 中是否有一个函数可以从内存中读取一组点并以 3D 形式绘制它们?

谢谢。

答案1

我找到了一个解决方案。该解决方案的灵感来自另一篇 StackExchange 帖子。

圆柱上的螺旋线

主要思想是使用函数“\pgfplotfunction”

以下是一段代码:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usepackage{pgfplots}
\usetikzlibrary{shapes}
\tdplotsetmaincoords{60}{110}


\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}[tdplot_main_coords]
  \node [cylinder,rotate=90,draw,aspect=2,minimum width=2cm,minimum height=3.5cm](C){};


  \begin{scope}[color=black, dashed]
  \pgfplothandlerlineto
  \pgfplotfunction{\t}{-90,-89,...,15}
       {\pgfpointxyz {cos(\t)}{sin(\t)}{-0.25+\t/360}} 
       \pgfusepath{stroke}
  \end{scope}

  \begin{scope}[color=red]
  \pgfplothandlerlineto
  \pgfplotfunction{\t}{15,16,...,110}
       {\pgfpointxyz {cos(\t)}{sin(\t)}{-0.25+\t/360}} 
       \pgfusepath{stroke}
  \end{scope}

  \begin{scope}[color=red, dashed]
  \pgfplothandlerlineto
  \pgfplotfunction{\t}{110,111,...,303}
       {\pgfpointxyz {cos(\t)}{sin(\t)}{-0.25+\t/360}} 
       \pgfusepath{stroke}
  \end{scope}


  \begin{scope}[color=red]
  \pgfplothandlerlineto
  \pgfplotfunction{\t}{303,304,...,340}
       {\pgfpointxyz {cos(\t)}{sin(\t)}{-0.25+\t/360}} 
       \pgfusepath{stroke}
  \end{scope}



  \begin{scope}[color=black, dashed]
  \pgfplothandlerlineto
  \pgfplotfunction{\t}{340,341,...,370}
       {\pgfpointxyz {cos(\t)}{sin(\t)}{-0.25+\t/360}} 
       \pgfusepath{stroke}
  \end{scope}

  \def\ang{340}
  \pgfmathsetmacro\bx{cos(\ang)}
  \pgfmathsetmacro\by{sin(\ang)}
  \pgfmathsetmacro\bz{-0.24+ \ang/360}

  \coordinate (B) at (\bx,\by,\bz);



  \draw[fill] (0.9922,0.25,-0.2) circle [x=1cm,y=1cm,radius=0.045]node[below]{$A$};
  \draw[fill] (B) circle [x=1cm,y=1cm,radius=0.045]node[below]{$B$};
\end{tikzpicture}
\end{document}

这是由此得出的图表。

圆柱上的螺旋

相关内容