Fonctions trigonométriques animées

Oct 25 2020

J'ai besoin de tracer les 6 principales fonctions trigonométriques d'une manière animée similaire à celle illustrée dans Dessiner un gif animé de la fonction trigonométrique

cependant,

  • J'ai besoin que le cercle soit le même que celui montré ici: https://texample.net/tikz/examples/unit-circle/ où les valeurs utilisées pour chaque courbe doivent être mises en surbrillance (lorsque vous utilisez la courbe de signe, mettez en surbrillance les valeurs de la courbe de signe sur le cercle .... et ainsi de suite)

  • J'ai besoin que la courbe de l'onde soit similaire à celle illustrée dans Comment animer une courbe sinusoïdale dans PStricks / Tikz (mais les angles doivent être en radians et en degrés, mettez en évidence chaque 2 angles équivalents sur la courbe et le cercle en animation, doivent également montrer la durée de la période ...)

  • Besoin également d'un septième graphique pour tracer la courbe sinusoïdale et cosinus se chevauchant avec différentes couleurs pour les mettre en valeur.

  • Besoin de souligner tous les détails possibles.

J'ai inclus le dessin et un code d'animation précédemment proposé dans un article précédent (MWE) comme point de départ, mais c'est un peu écrasant de le modifier et d'inclure tous les détails.


\documentclass{article}
\usepackage{amsmath} 

\usepackage{tikz} 
    \usetikzlibrary{arrows.meta,arrows,positioning,matrix,quotes, shapes.geometric,calc,decorations.markings,decorations.pathmorphing,
backgrounds,graphs,shapes,shapes.misc,fit,angles,quotes,datavisualization.formats.functions,intersections,hobby} 

\usepackage[bidi=basic,layout=lists.tabular]{babel}
\babelprovide[import=en,maparabic,main]{english}
\babelfont[english]{rm}{Times New Roman}

\begin{document}

\begin{figure}[!htbp]
\begin{center}
\begin{tikzpicture}[scale=5.3,cap=round,>=latex]
 % draw the coordinates
        \draw[->] (-1.5cm,0cm) -- (1.5cm,0cm) node[right,fill=white] {$x$};
        \draw[->] (0cm,-1.5cm) -- (0cm,1.5cm) node[above,fill=white] {$y$};

        % draw the unit circle
        \draw[thick] (0cm,0cm) circle(1cm);

        \foreach \x in {0,30,...,360} {
                % lines from center to point
                \draw[gray] (0cm,0cm) -- (\x:1cm);
                % dots at each point
                \filldraw[black] (\x:1cm) circle(0.4pt);
                % draw each angle in degrees
                \draw (\x:0.6cm) node[fill=white] {$\x^\circ$};
        }

        % draw each angle in radians
        \foreach \x/\xtext in {
            30/\frac{\pi}{6},
            45/\frac{\pi}{4},
            60/\frac{\pi}{3},
            90/\frac{\pi}{2},
            120/\frac{2\pi}{3},
            135/\frac{3\pi}{4},
            150/\frac{5\pi}{6},
            180/\pi,
            210/\frac{7\pi}{6},
            225/\frac{5\pi}{4},
            240/\frac{4\pi}{3},
            270/\frac{3\pi}{2},
            300/\frac{5\pi}{3},
            315/\frac{7\pi}{4},
            330/\frac{11\pi}{6},
            360/2\pi}
                \draw (\x:0.85cm) node[fill=white] {$\xtext$};

        \foreach \x/\xtext/\y in {
            % the coordinates for the first quadrant
            30/\frac{\sqrt{3}}{2}/\frac{1}{2},
            45/\frac{\sqrt{2}}{2}/\frac{\sqrt{2}}{2},
            60/\frac{1}{2}/\frac{\sqrt{3}}{2},
            % the coordinates for the second quadrant
            150/-\frac{\sqrt{3}}{2}/\frac{1}{2},
            135/-\frac{\sqrt{2}}{2}/\frac{\sqrt{2}}{2},
            120/-\frac{1}{2}/\frac{\sqrt{3}}{2},
            % the coordinates for the third quadrant
            210/-\frac{\sqrt{3}}{2}/-\frac{1}{2},
            225/-\frac{\sqrt{2}}{2}/-\frac{\sqrt{2}}{2},
            240/-\frac{1}{2}/-\frac{\sqrt{3}}{2},
            % the coordinates for the fourth quadrant
            330/\frac{\sqrt{3}}{2}/-\frac{1}{2},
            315/\frac{\sqrt{2}}{2}/-\frac{\sqrt{2}}{2},
            300/\frac{1}{2}/-\frac{\sqrt{3}}{2}}
                \draw (\x:1.25cm) node[fill=white] {$\left(\xtext,\y\right)$};

        % draw the horizontal and vertical coordinates
        % the placement is better this way
        \draw (-1.25cm,0cm) node[above=1pt] {$(-1,0)$}
              (1.25cm,0cm)  node[above=1pt] {$(1,0)$}
              (0cm,-1.25cm) node[fill=white] {$(0,-1)$}
              (0cm,1.25cm)  node[fill=white] {$(0,1)$};
\end{tikzpicture}
\end{center}
\caption
{Circle}
\label{fig:angle}
\end{figure}


\foreach \angle in {0,10,...,360}
{
  \begin{tikzpicture}
    % fill circle and plot
    \fill[blue!50] (-1,0) arc (0:\angle:1) -- (-2,0) -- cycle;
    \fill[blue!50] plot[smooth,domain=0:\angle] (pi/180*\x,{sin(\x)}) |- (0,0);
    % draw connection
    \draw (-2,0) +(\angle:1) circle (2pt) -- (pi/180*\angle,{sin(\angle)}) circle (2pt);
    % draw axes an ticks
    \draw (-3.5,0) -- (7,0);
    \foreach \deg in {90, 180, 270, 360}
      \draw (pi/180*\deg,2pt) -- (pi/180*\deg,-2pt) node[below] {$\deg^\circ$};
    \draw (0,-1.2) -- (0,1.2);
    \foreach \y in {-1,-0.5,0.5,1}
      \draw (2pt,\y) -- (-2pt,\y) node[left] {$\y$};
    % draw plot and circle outline
    \draw plot[smooth,domain=0:360] (pi/180*\x,{sin(\x)});
    \draw (-2,0) circle (1);
  \end{tikzpicture}
}
\end{document}

Réponses

2 NguyenVanJustonlyChi Oct 30 2020 at 17:49

Il vous en faut plus howevermais votre code n'est pas le plus proche du résultat souhaité.

Une version avec Asymptote .

import animate;
import graph;
settings.tex="pdflatex"; 
animation Ani;
size(500);

transform t(real x=0){
return shift((-5,x))*scale(3);
}
transform t=t();
transform labelscale=scale(.6);
transform t1=shift((1.5,0))*scale(2,3);

string[][] s={
  {"30","\frac{\pi}{6}"},
  {"45","\frac{\pi}{4}"},
  {"60","\frac{\pi}{3}"},
  {"90","\frac{\pi}{2}"},
  {"120","\frac{2\pi}{3}"},
  {"135","\frac{3\pi}{4}"},
  {"150","\frac{5\pi}{6}"},
  {"180","\pi"},
  {"210","\frac{7\pi}{6}"},
  {"225","\frac{5\pi}{4}"},
  {"240","\frac{4\pi}{3}"},
  {"270","\frac{3\pi}{2}"},
  {"300","\frac{5\pi}{3}"},
  {"315","\frac{7\pi}{4}"},
  {"330","\frac{11\pi}{6}"},
  {"360","2\pi"}
};
int[] a={30,45,60,150,135,120,210,225,240,330,315,300};
string[][] z={
  // the coordinates for the first quadrant
  {"\frac{\sqrt{3}}{2}","\frac{1}{2}"},
  {"\frac{\sqrt{2}}{2}","\frac{\sqrt{2}}{2}"},
  {"\frac{1}{2}","\frac{\sqrt{3}}{2}"},
  // the coordinates for the second quadrant
  {"-\frac{\sqrt{3}}{2}","\frac{1}{2}"},
  {"-\frac{\sqrt{2}}{2}","\frac{\sqrt{2}}{2}"},
  {"-\frac{1}{2}","\frac{\sqrt{3}}{2}"},
  // the coordinates for the third quadrant
  {"-\frac{\sqrt{3}}{2}","-\frac{1}{2}"},
  {"-\frac{\sqrt{2}}{2}","-\frac{\sqrt{2}}{2}"},
  {"-\frac{1}{2}","-\frac{\sqrt{3}}{2}"},
  // the coordinates for the fourth quadrant
  {"\frac{\sqrt{3}}{2}","-\frac{1}{2}"},
  {"\frac{\sqrt{2}}{2}","-\frac{\sqrt{2}}{2}"},
  {"\frac{1}{2}","-\frac{\sqrt{3}}{2}"}
};
string[] q={
  "90^\circ(\frac{\pi}{2})",
  "180^\circ(\pi)",
  "270^\circ(\frac{3\pi}{2})",
  "360^\circ(2\pi)",
};
real[] m={pi/2,pi,3*pi/2,2*pi};

for (int j=0; j <= 360; j=j+5){
save();
// sin(x)
if(j != 0) { fill(t*((0,0)--arc((0,0),1,0,j)--cycle),blue+opacity(.4)); }

draw(Label("$x$",EndPoint,filltype=Fill(white)),t*((-1.5,0)--(1.5,0)),Arrow);
draw(Label("$y$",EndPoint,filltype=Fill(white)),t*((0,-1.5)--(0,1.5)),Arrow);

draw(t*circle((0,0),1));

for (int i=0; i<= 360; i=i+30)
{
  draw(t*((0,0)--dir(i)),gray);
  dot(t*dir(i),linewidth(1.5bp));
  if(i != 0)
    label(labelscale*Label(format("$%d^\circ$",i),filltype=Fill(invisible)),
          t*(0.6*dir(i)));
}

for (int i=0; i<s.length; ++i) {
  label(labelscale*Label("$"+s[i][1]+"$",filltype=Fill(invisible)),
        t*(0.85*dir((int) s[i][0]))); 
}
for (int i=0; i<a.length; ++i) { 
  label(labelscale*Label("$("+z[i][0]+","+z[i][1]+")$",filltype=Fill(invisible)),
        t*(1.3*dir(a[i]))); 
}
label(labelscale*"$(-1,0)$",t*(-1.25,0),dir(90));
label(labelscale*"$(1,0)$",t*(1.25,0),dir(90));
label(labelscale*"$(0,-1)$",t*(0,-1.25),Fill(white));
label(labelscale*"$(0,1)$",t*(0,1.25),Fill(white));
//************************
draw(scale(.8)*Label("$x$",EndPoint),t1*((0,0)--(2*pi+0.5,0)),Arrow);
draw(scale(.8)*Label("$y=\sin(t)$",EndPoint),t1*((0,-1.5)--(0,1.5)),Arrow);
for (real a : new real[]{-1,-0.5,0.5,1})
{
draw(scale(0.6)*Label("$"+(string) a+"$",Relative(0)),t1*((0,a)-(0.1,0)--(0,a)+(0.1,0)));
}

for (int i=0; i< q.length; ++i)
{
  draw(scale(0.6)*Label("$"+q[i]+"$",Relative(0),Fill(invisible)),
       t1*((m[i],0)-(0,0.03)--(m[i],0)+(0,0.03)));
}

real f(real x){return sin(x);}
guide F=graph(f,0,2*pi,300);
fill(t1*((0,0)--graph(f,0,radians(j),300)--(radians(j),0)--cycle),blue+opacity(.4));
draw(t1*F,blue);
draw(t*dir(j)--t1*(radians(j),f(radians(j))),(j!=0) ? currentpen : invisible);
draw(t1*(radians(j),f(radians(j)))--t1*(radians(j),0),black+0.4bp);
dot(t*dir(j),Fill(white));
dot(t1*(radians(j),f(radians(j))),Fill(white));

label(Label("Length"+"$="+(string) arclength(graph(f,0,radians(j),1000))+"$"),t1*(4,-2));
label(Label("Length"+"$="+(string) arclength((j!=0) ? Arc((0,0),1,0,j) : nullpath)+"$"),
      t*(0,-2));

Ani.add();
restore();
draw(t1*(radians(j),f(radians(j)))--t1*(radians(j),0),black+0.4bp);
}
erase();
Ani.movie(BBox(2mm,invisible));