在 Tikz 中绘制正弦波

在 Tikz 中绘制正弦波

最简单的方法是什么草图PGF/Tikz 中的正弦波?我尝试过这个:

\begin{tikzpicture}
  \draw[loosely dotted] (0,0) grid (4,2);
  \draw[x=0.5cm,y=1cm, ultra thick, red]
    (0,1) cos (1,0) sin (2,-1) cos (3,0) sin (4,1) cos (5,0) sin (6,-1);
\end{tikzpicture}

如何让网格覆盖整个波形?有没有更好的方法素描(未绘制)函数/波?

答案1

正如我在评论中所说,您可以通过选择其中的线上的坐标来调整网格grid

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \draw[loosely dotted] (0,-1) grid (3,1);
  \draw[x=0.5cm,y=1cm, ultra thick, red]
    (0,1) cos (1,0) sin (2,-1) cos (3,0) sin (4,1) cos (5,0) sin (6,-1);
\end{tikzpicture}
\end{document}

第二\draw行改变了X默认为将axis 设置为 axis to0.5cm而不是as。因此第一行和第二行上的点是相同的。1cm(3,1)(6,1)

示例代码输出

如果你只是想平滑地插入曲线上的点,你可以使用plottikz 的命令,如下所示:

\draw[x=0.5cm,y=1cm, ultra thick, red]
    plot[smooth] coordinates {(0,1) (1,0) (2,-1) (3,0) (4,1) (5,0) (6,-1)};

有一个tension键可以调整平滑的曲线度,但坦率地说,我无法获得比默认值更好的效果。

示例代码输出

另一个选择是使用贝塞尔曲线。然而,在两点之间指定贝塞尔曲线时,两个额外的需要点。这两个描述了从每个点出来和进入的速度矢量。

\draw[x=0.5cm,y=1cm, ultra thick, red]  (0,1) 
  .. controls ([xshift=\dx]0,1)  and ([xshift=-\dx]2,-1)  .. (2,-1) 
  .. controls ([xshift=\dx]2,-1) and ([xshift=-\dx]4,1)   .. (4,1) 
  .. controls ([xshift=\dx]4,1)  and ([xshift=-\dx]6,-1)  .. (6,-1) ;

示例代码输出

你会注意到我利用对称性来消除沿 $x$ 轴的坐标。

答案2

在此处输入图片描述

trembling模块提供了一个 要设置的Asymptote类的对象,用于对任意曲线应用颤动变换:tremblesketch.asy

import graph; // for cos
import trembling;
import math; // for the grid

size(8cm);

real xmin=0, xmax=1.5pi;
real ymin=-1, ymax=1;

tremble tr=tremble(angle=20,frequency=0.6,random=50,fuzz=1);
path sinesketch=tr.deform(graph(cos,xmin,xmax)); 

int rows=2, cols=3;
add(
  shift(xmin,ymin)*scale((xmax-xmin)/cols,(ymax-ymin)/rows)
  *grid(cols,rows, red+dotted+1.2pt)
);
draw(sinesketch,darkblue+1.2pt);

运行asy -f pdf sketch.asy以获取独立的sketch.pdf

相关内容