Эскиз синусоидальной волны в 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строка изменяет масштабИксось to 0.5cmвместо 1cmas по умолчанию. Так что (3,1)на первой строке та же точка, что и (6,1)на второй.

пример выходного кода

Если вы просто хотите плавно интерполировать точки на кривой, вы можете использовать plotкоманду tikz следующим образом:

\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объект класса tremble , который необходимо настроить, чтобы применить дрожащее преобразование к произвольной кривой. 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);

Запустите asy -f pdf sketch.asy, чтобы получить автономный sketch.pdf.

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