23.10.2014 Views

mfpic-doc.pdf.

mfpic-doc.pdf.

mfpic-doc.pdf.

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

4.6 FUNCTIONS AND PLOTTING. 42<br />

<strong>mfpic</strong> environment, it is local to that environment, otherwise it is available to all subsequent <strong>mfpic</strong><br />

environments.<br />

As an example, after \fdef{myfcn}{s,t}{s*t-t}, any place below where a METAFONT expression<br />

is required, you can use myfcn(2,3) to mean 2*3-3 and myfcn(x,x) to mean x*x-x.<br />

Operations available include +, -, * , /, and ** (x**y= x y ), with ‘(’ and ‘)’ for grouping. Functions<br />

already available include the standard METAFONT functions round, floor, ceiling, abs,<br />

sqrt, sind, cosd, mlog, and mexp. Note that in METAFONT the operations * and ** have the same<br />

level of precedence, so x*y**z means (xy) z . Use parentheses liberally!<br />

(Notes: The METAFONT trigonometric functions sind and cosd take arguments in degrees;<br />

mlog(x)= 256lnx, and mexp is its inverse.) You can also define the function 〈fcn〉 by cases, using<br />

the METAFONT conditional expression<br />

if 〈boolean〉: 〈expr〉 elseif 〈boolean〉: ... else: 〈expr〉 fi.<br />

Relations available for the 〈boolean〉 part of the expression include =, , =.<br />

Complicated functions can be defined by a compound expression, which is a series of META-<br />

FONT statements, followed by an expression, all enclosed between begingroup and endgroup.<br />

The \fdef command automatically supplies these grouping commands around the definition so if<br />

the entire 〈mf-expr〉 is one such compound expression the user need not type them. METAFONT<br />

functions can call METAFONT functions, even recursively.<br />

Many common functions have been predefined in grafbase, which is a package of METAFONT<br />

macros that implement MFPIC’s drawing. These include the rest of the trig functions tand, cotd,<br />

secd, cscd, which take angles in degrees, plus variants sin, cos, tan, cot, sec, and csc, which<br />

take angles in radians. Some inverse trig functions are also available, the following produce angles<br />

in degrees: asin, acos, and atan, and the following in radians: invsin, invcos, invtan. The<br />

exponential and hyperbolic functions: exp, sinh, cosh, tanh, coth, sech, and csch; and some of<br />

their inverses: ln (or log), asinh, acosh, and atanh are also defined.<br />

There are also two conversion functions: radians(t) produces the number of radians in t<br />

degrees and degrees(t) produces the number of degrees in t radians. In these expressions the<br />

special variable pi produces π, accurate to roughly 5 decimals. (METAFONT and METAPOST provide<br />

accuracy only to ±2 −17 = ±.76 × 10 −5 .)<br />

The integer functions gcd(m,n) and lcm(m,n) produce the greatest common divisor and least<br />

common multiple of two integers m and n.<br />

4.6.2 PLOTTING FUNCTIONS<br />

The plotting macros take two or more arguments. They have an optional first argument, 〈spec〉,<br />

which determines whether a function is drawn smooth (as a METAFONT Bézier curve), or polygonal<br />

(as line segments)—if 〈spec〉 is p, the function will be polygonal. Otherwise the 〈spec〉 should be<br />

s, followed by an optional positive number no smaller than 0.75. In this case the function will be<br />

smooth with a tension equal to the number. See the \curve command (subsection 4.2.5) for an<br />

explanation of tension. The default 〈spec〉 depends on the purpose of the macro.<br />

One compulsory argument contains three values 〈min〉, 〈max〉 and 〈step〉 separated by commas.<br />

The independent variable of a function starts at the value 〈min〉 and steps by 〈step〉 until reaching<br />

〈max〉. If (〈max〉 − 〈min〉)/〈step〉 is not a whole number, the nearest whole number of equal steps<br />

are used. One may have to experiment with the size of 〈step〉, since METAFONT merely connects the<br />

points corresponding to these steps with what it considers to be a smooth curve. Smaller 〈step〉 gives<br />

better accuracy, but too small may cause the curve to exceed METAFONT’s capacity or slow down<br />

its processing. Increasing the tension may help keep the curve in line, but at the expense of reduced<br />

smoothness.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!