
Какой самый простой способэскизсинусоидальная волна в 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
вместо 1cm
as по умолчанию. Так что (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
.