# [NTG-context] OT: looking for metapost/fun examples

David Arnold darnold at northcoast.com
Sun Mar 27 06:39:26 CEST 2005

Gerben, Again, thanks for all you do. Here's a Fourier approximation of
a square wave. Again, I compiled this in Texshop so I know it works.

%verbatimtex
% \input mtplain
% \MTMI{8pt}{6pt}{5pt}
% \MTSY{8pt}{6pt}{5pt}
% \MTEX{8pt}
% \MathRoman{tir}{8pt}{6pt}{5pt}
% \MathBold{tib}{8pt}{6pt}{5pt}
%etex

%Input Context macros
input mp-tool

%define ytick
vardef ytick(expr pos)=
path p;
p:=(-2,0)--(2,0);
draw p shifted pos;
enddef;

%define xtick
vardef xtick(expr pos)=
path p;
p:=(0,-2)--(0,2);
draw p shifted pos;
enddef;

%define pi
pi:=3.14159;

%define cosine in radians
vardef cos(expr x)=
cosd(x*180/pi)
enddef;

%define sine in radians
vardef sin(expr x)=
sind(x*180/pi)
enddef;

%hyperbolic sine
vardef sinh(expr x)=
(exp(x)-exp(-x))/2
enddef;

beginfig(1);

%enter number of terms
numeric N;
N=6;

%define L
numeric L;
L:=pi;

%define a_0
ao:=1;

%define a_n
vardef a(expr n)=
2*sin(n*pi/2)/(n*pi)
enddef;

%define b_n
vardef b(expr n)=
0
enddef;

%initialize scale
numeric ux, uy;
pi*ux=2in; 1.5*uy=2in;

%draw axes
drawarrow (0,0)--(3.5ux,0);
drawarrow (0,0)--(0,1.5uy);

%label axes
label.rt(btex $x$ etex, (3.5ux,0));

%tick marks
xtick((pi*ux,0));
label.bot(btex $\pi$ etex, (pi*ux,0));
ytick((0,1*uy));
label.lft(btex $1$ etex, (0,1*uy));

%draw the function in black
draw (0,1uy)--((pi/2)*ux,1uy);

%draw Fourier approximation in cyan
path p;
numeric x, y;
x:=0;
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=(x,y);
for x=0 step .1 until pi:
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=p--(x,y);
endfor;
x:=pi;
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=p--(x,y);
p:=p xyscaled(ux,uy);
draw p withcolor cyan;

endfig;

beginfig(0);

%enter number of terms
numeric N;
N=6;

%define L
numeric L;
L:=pi;

%define a_0
ao:=1;

%define a_n
vardef a(expr n)=
2*sin(n*pi/2)/(n*pi)
enddef;

%define b_n
vardef b(expr n)=
0
enddef;

%initialize scale
numeric ux, uy;
6*pi*ux=2in; 1.5*uy=2in;

%draw axes
drawdblarrow (-3.5*pi*ux,0)--(3.5*pi*ux,0);
drawarrow (0,0)--(0,1.5uy);

%label axes
label.rt(btex $x$ etex, (3.5*pi*ux,0));

%tick marks
xtick((pi*ux,0));
xtick((2*pi*ux,0));
xtick((3*pi*ux,0));
label.bot(btex $3\pi$ etex, (3*pi*ux,0));
xtick((-pi*ux,0));
xtick((-2*pi*ux,0));
xtick((-3*pi*ux,0));
label.bot(btex $-3\pi$ etex, (-3*pi*ux,0));
ytick((0,1*uy));
label.lft(btex $1$ etex, (0,1*uy));

%draw the function in black
path q;
q:=(-pi/2,1)--(pi/2,1);
q:=q xyscaled(ux,uy);
draw q;
draw q shifted (2*pi*ux,0);
draw q shifted (-2*pi*ux,0);

%draw Fourier approximation in cyan
path p;
numeric x, y;
x:=-3*pi;
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=(x,y);
for x=-3*pi step .1 until 3*pi:
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=p--(x,y);
endfor;
x:=3*pi;
y:=ao/2;
for k=1 step 1 until N:
y:=y+a(k)*cos(k*pi*x/L)+b(k)*sin(k*pi*x/L);
endfor;
p:=p--(x,y);
p:=p xyscaled(ux,uy);
draw p withcolor cyan;

endfig;
end;

On Mar 26, 2005, at 3:19 PM, Gerben Wierda wrote:

> I am trying to learn metapost/fun, inline in ConTeXt source. Some
> basic things are clear, but now the issue is metapost itself.
>
> For instance, I would like to plot a Fourier approximation of a block
> function.
>
> For instance, I would like to plot a gaussian spread.
>
> I am looking for examples on how to do this. I need to do a bit of
> programming here and these are my initial projects.
>
> Thanks in advance,
>
> G
>
> _______________________________________________
> ntg-context mailing list
> ntg-context at ntg.nl
> http://www.ntg.nl/mailman/listinfo/ntg-context
>



More information about the ntg-context mailing list