Esboce uma onda senoidal em Tikz

Esboce uma onda senoidal em Tikz

Qual é a maneira mais fácil deesboçouma onda sinusoidal em PGF/Tikz? Eu tentei isso:

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

Como faço para que a grade cubra toda a onda? Existe uma maneira melhor dedesenhando(não plotando) funções/ondas?

Responder1

Como eu disse no meu comentário, você pode ajustar a grade escolhendo as coordenadas na linha que contém 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}

Sua segunda \drawlinha altera a escala doxeixo para 0.5cmem vez de 1cmcomo é o padrão. Portanto, (3,1)na primeira linha está o mesmo ponto (6,1)da segunda linha.

saída de código de amostra

Se você deseja apenas interpolar pontos em uma curva suavemente, você pode usar o plotcomando tikz assim:

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

Há uma tensionchave que ajusta a curvatura da suavização, mas francamente não consegui nada que me parecesse melhor do que o padrão.

saída de código de amostra

Outra opção seria utilizar curvas de Bézier. No entanto, ao especificar uma curva de Bézier entre dois pontos, doisadicionalsão necessários pontos. Esses dois descrevem o vetor velocidade saindo e entrando em cada ponto.

\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) ;

saída de código de amostra

Você notará que aproveitei a simetria para eliminar as coordenadas ao longo do eixo $x$.

Responder2

insira a descrição da imagem aqui

O tremblingmódulo do Asymptoteoferece um objeto de classe tremble a ser configurado, para aplicar uma transformação trêmula em uma curva arbitrária. sketch.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);

Corra asy -f pdf sketch.asypara obter um arquivo sketch.pdf.

informação relacionada