diff options
Diffstat (limited to 'Build/source/utils/asymptote/doc')
-rw-r--r-- | Build/source/utils/asymptote/doc/CAD.pdf | bin | 67565 -> 67395 bytes | |||
-rw-r--r-- | Build/source/utils/asymptote/doc/FAQ/asy-faq.info | 2 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/asymptote.pdf | bin | 1692650 -> 1553892 bytes | |||
-rw-r--r-- | Build/source/utils/asymptote/doc/asymptote.sty | 108 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/asymptote.texi | 26 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/extra/intro.asy | 833 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/extra/intro_.bbl | 29 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/latexusage-1.asy | 55 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/latexusage-2.asy | 23 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/latexusage-3.asy | 38 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/latexusage.tex | 3 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/png/Makefile.in | 2 | ||||
-rw-r--r-- | Build/source/utils/asymptote/doc/png/asymptote.info | 285 |
13 files changed, 808 insertions, 596 deletions
diff --git a/Build/source/utils/asymptote/doc/CAD.pdf b/Build/source/utils/asymptote/doc/CAD.pdf Binary files differindex 7076ef94893..327f2ff3b0b 100644 --- a/Build/source/utils/asymptote/doc/CAD.pdf +++ b/Build/source/utils/asymptote/doc/CAD.pdf diff --git a/Build/source/utils/asymptote/doc/FAQ/asy-faq.info b/Build/source/utils/asymptote/doc/FAQ/asy-faq.info index 4741db226ae..64d6def87ce 100644 --- a/Build/source/utils/asymptote/doc/FAQ/asy-faq.info +++ b/Build/source/utils/asymptote/doc/FAQ/asy-faq.info @@ -9,7 +9,7 @@ END-INFO-DIR-ENTRY File: $prefix.info, Node: Top, Next: Question 1.1, Up: (dir) ASYMPTOTE FREQUENTLY ASKED QUESTIONS - 25 Jun 2010 + 05 Jul 2010 This is the list of Frequently Asked Questions about Asymptote (asy). diff --git a/Build/source/utils/asymptote/doc/asymptote.pdf b/Build/source/utils/asymptote/doc/asymptote.pdf Binary files differindex f21cc658464..d4a834d8dde 100644 --- a/Build/source/utils/asymptote/doc/asymptote.pdf +++ b/Build/source/utils/asymptote/doc/asymptote.pdf diff --git a/Build/source/utils/asymptote/doc/asymptote.sty b/Build/source/utils/asymptote/doc/asymptote.sty index 4dc89de1e52..4b0cda55ee1 100644 --- a/Build/source/utils/asymptote/doc/asymptote.sty +++ b/Build/source/utils/asymptote/doc/asymptote.sty @@ -3,7 +3,7 @@ %%% Modified by John Bowman %%% Adapted from comment.sty (Under GPL v2+) -\ProvidesPackage{asymptote}[2010/04/15 v1.12 Asymptote style file for LaTeX] +\ProvidesPackage{asymptote}[2010/07/05 v1.13 Asymptote style file for LaTeX] \RequirePackage{keyval} \RequirePackage{ifthen} \newif\ifASYinline @@ -24,25 +24,22 @@ \def\makeinnocent#1{\catcode`#1=12 } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} \newwrite\AsyStream -\newread\AsyTestStream +\newwrite\AsyAllStream \newread\AsyTestTeXStream -\def\AsyFile{\jobname.asy} -\openin\AsyTestStream=\jobname_.pre -\ifeof\AsyTestStream +\openin\AsyStream=\jobname_.pre +\ifeof\AsyStream \else \input \jobname_.pre \fi -\closein\AsyTestStream% +\closein\AsyStream% -\immediate\openout\AsyStream=\AsyFile -\immediate\write\AsyStream{if(!settings.multipleView)}% -\immediate\write\AsyStream{ settings.batchView=false;}% +\immediate\openout\AsyAllStream=\jobname.asy \newif\ifASYattach \newif\ifASYtex - \newif\ifASYPDF + \ifx\pdfoutput\undefined \else \ifcase\pdfoutput @@ -50,19 +47,6 @@ \ASYPDFtrue \fi \fi -\ifx\XeTeXversion\undefined -\ifASYPDF -\immediate\write\AsyStream{settings.tex="pdflatex";}% -\fi -\else -\immediate\write\AsyStream{settings.tex="xelatex";}% -\ASYPDFtrue -\fi - -\ifASYinline -\immediate\write\AsyStream{settings.inlinetex=true;}% -\immediate\write\AsyStream{deletepreamble();}% -\fi \newbox\ASYbox \newcounter{asy} @@ -148,57 +132,57 @@ \gdef\ASYheight{}% \gdef\ASYviewportwidth{\ASYdefaultviewportwidth}% \gdef\ASYviewportheight{}% - \immediate\write\AsyStream{\@charrb);}% - \immediate\write\AsyStream{// End of Asymptote Figure \the\c@asy}% + \immediate\closeout\AsyStream + \ifASYtex - \openin\AsyTestStream=\Jobname-\the\c@asy_.tex + \openin\AsyStream=\AsyFile_.tex \else \ifASYPDF - \openin\AsyTestStream=\Jobname-\the\c@asy.pdf + \openin\AsyStream=\AsyFile.pdf \else - \openin\AsyTestStream=\Jobname-\the\c@asy.eps + \openin\AsyStream=\AsyFile.eps \fi \fi - \ifeof\AsyTestStream + \ifeof\AsyStream \ifASYtex - \PackageWarning{asymptote}{file \Jobname-\the\c@asy_.tex does not exist}% + \PackageWarning{asymptote}{file \AsyFile_.tex does not exist}% \else - \openin\AsyTestTeXStream=\Jobname-\the\c@asy_.tex + \openin\AsyTestTeXStream=\AsyFile_.tex \ifeof\AsyTestTeXStream \ifASYPDF - \PackageWarning{asymptote}{file \Jobname-\the\c@asy.pdf does not exist}% + \PackageWarning{asymptote}{file \AsyFile.pdf does not exist}% \else - \PackageWarning{asymptote}{file \Jobname-\the\c@asy.eps does not exist}% + \PackageWarning{asymptote}{file \AsyFile.eps does not exist}% \fi \else \catcode`:=12 - \input \Jobname-\the\c@asy_.tex% + \input \AsyFile_.tex% \fi \closein\AsyTestTeXStream% \fi - \closein\AsyTestStream% + \closein\AsyStream% \else - \closein\AsyTestStream% + \closein\AsyStream% \ifASYtex \catcode`:=12 - \input \Jobname-\the\c@asy_.tex% + \input \AsyFile_.tex% \else \ifASYattach \ifASYPDF - \openin\AsyTestStream=\Jobname-\the\c@asy+0.pdf + \openin\AsyStream=\AsyFile+0.pdf \fi - \ifeof\AsyTestStream - \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\Jobname-\the\c@asy}}% + \ifeof\AsyStream + \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile}}% \else - \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\Jobname-\the\c@asy+0}}% + \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile+0}}% \fi - \textattachfile{\Jobname-\the\c@asy.pdf}{\phantom{\copy\ASYbox}}% + \textattachfile{\AsyFile.pdf}{\phantom{\copy\ASYbox}}% \vskip-\ht\ASYbox% \indent% \box\ASYbox% - \closein\AsyTestStream% + \closein\AsyStream% \else - \includegraphics[hiresbb]{\Jobname-\the\c@asy}% + \includegraphics[hiresbb]{\AsyFile}% \fi \fi \fi @@ -229,22 +213,38 @@ \let\par\empty \stepcounter{asy}% \setkeys{ASYkeys}{#1}% - \immediate\write\AsyStream{}% - \immediate\write\AsyStream{// Beginning of Asymptote Figure \the\c@asy}% - \immediate\write\AsyStream{eval(quote\@charlb}% - \immediate\write\AsyStream{defaultfilename='\Jobname-\the\c@asy';}% + \immediate\write\AsyAllStream% + {eval(quote\@charlb include "\jobname-\the\c@asy";\@charrb);}% + \immediate\openout\AsyStream=\jobname-\the\c@asy.asy + \gdef\AsyFile{\Jobname-\the\c@asy} + \immediate\write\AsyStream{if(!settings.multipleView)}% + \immediate\write\AsyStream{ settings.batchView=false;}% + \ifx\XeTeXversion\undefined + \ifASYPDF + \immediate\write\AsyStream{settings.tex="pdflatex";}% + \fi + \else + \immediate\write\AsyStream{settings.tex="xelatex";}% + \ASYPDFtrue + \fi + + \ifASYinline + \immediate\write\AsyStream{settings.inlinetex=true;}% + \immediate\write\AsyStream{deletepreamble();}% + \fi + \immediate\write\AsyStream{defaultfilename="\AsyFile";}% \immediate\write\AsyStream{if(settings.render < 0) settings.render=4;}% \ifASYattach \immediate\write\AsyStream{settings.inlineimage=false;}% \immediate\write\AsyStream{settings.embed=false;}% - \immediate\write\AsyStream{settings.outformat='pdf';}% + \immediate\write\AsyStream{settings.outformat="pdf";}% \immediate\write\AsyStream{settings.toolbar=true;}% \else \immediate\write\AsyStream{settings.inlineimage=true;}% \immediate\write\AsyStream{settings.embed=true;}% - \immediate\write\AsyStream{settings.outformat='';}% + \immediate\write\AsyStream{settings.outformat="";}% \immediate\write\AsyStream{settings.toolbar=false;}% - \immediate\write\AsyStream{viewportmargin=(1,1);}% + \immediate\write\AsyStream{viewportmargin=(2,2);}% \fi \immediate\write\AsyStream{\globalASYdefs}% \let\ThisAsymptote\WriteAsyLine% @@ -257,11 +257,11 @@ \AsymptoteEndDef{asydef} \def\AfterasydefAsymptote{} -\AtEndDocument{\immediate\closeout\AsyStream} +\AtEndDocument{\immediate\closeout\AsyAllStream} \newcommand{\ASYanimategraphics}[5][]{% -\openin\AsyTestStream=_#3.pdf -\ifeof\AsyTestStream% +\openin\AsyStream=_#3.pdf +\ifeof\AsyStream% \else% \animategraphics[{#1}]{#2}{_#3}{#4}{#5}% \fi% diff --git a/Build/source/utils/asymptote/doc/asymptote.texi b/Build/source/utils/asymptote/doc/asymptote.texi index 7c4f3d4e9d3..8eb575e2b03 100644 --- a/Build/source/utils/asymptote/doc/asymptote.texi +++ b/Build/source/utils/asymptote/doc/asymptote.texi @@ -101,7 +101,7 @@ Programming * Functions:: Traditional and high-order functions * Arrays:: Dynamic vectors * Casts:: Implicit and explicit casts -* Import:: Importing external @code{Asymptote} packages +* Import:: Importing external @code{Asymptote} modules * Static:: Where to allocate your variable? Operators @@ -1735,7 +1735,7 @@ In addition, it supports many features beyond the ones found in those languages. * Functions:: Traditional and high-order functions * Arrays:: Dynamic vectors * Casts:: Implicit and explicit casts -* Import:: Importing external @code{Asymptote} packages +* Import:: Importing external @code{Asymptote} modules * Static:: Where to allocate your variable? @end menu @@ -2923,7 +2923,7 @@ The base align setting of a pen is returned by @cindex @code{fontsize} @cindex @code{lineskip} @cindex @code{defaultpen} -@cindex @code{fix-cm} +@cindex @code{type1cm} @item The font size is specified in @TeX{} points (1 pt = 1/72.27 inches) with the function @code{pen fontsize(real size, real lineskip=1.2*size)}. The default font size, 12pt, may be changed with @code{defaultpen(pen)}. @@ -2931,10 +2931,10 @@ Nonstandard font sizes may require inserting @verbatim import fontsize; @end verbatim -at the beginning of the file (this requires the @code{fix-cm} package +at the beginning of the file (this requires the @code{type1cm} package available from @quotation -@url{http://www.ctan.org/tex-archive/help/Catalogue/entries/fix-cm} +@url{http://www.ctan.org/tex-archive/help/Catalogue/entries/type1cm} @end quotation and included in recent @code{LaTeX} distributions). The font size and line skip of a pen can be examined with the routines @@ -3940,6 +3940,14 @@ real y=4.3; pen reddash=red+dashed; @end verbatim +@code{var} may also be used with the extended @code{for} loop syntax. + +@verbatim +int[] a = {1,2,3}; +for (var x : a) + write(x); +@end verbatim + @node Structures @section Structures @cindex @code{struct} @@ -5953,7 +5961,13 @@ pdflatex latexusage To switch between using @code{latex} and @code{pdflatex} you may first need to remove the files @code{latexusage-*}, @code{latexusage_.pre}, and -@code{latexusage.aux}. +@code{latexusage.aux}. Version 1.13 of @code{Asymptote.sty} supports +processing each figure separately: @code{asy latexusage} is equivalent +to @code{asy latexusage-*.asy}. For example, one may wish to reduce +memory usage by generating each figure in a separate @code{UNIX} process: +@verbatim +/bin/ls latexusage-*.asy | xargs --replace=% asy % +@end verbatim @cindex @code{width} @cindex @code{height} diff --git a/Build/source/utils/asymptote/doc/extra/intro.asy b/Build/source/utils/asymptote/doc/extra/intro.asy index 4234b8cee8e..20b03c578dc 100644 --- a/Build/source/utils/asymptote/doc/extra/intro.asy +++ b/Build/source/utils/asymptote/doc/extra/intro.asy @@ -1,5 +1,3 @@ -// Introduction to Asymptote - orientation=Landscape; settings.tex="pdflatex"; @@ -8,6 +6,10 @@ import slide; import three; import animate; +bool long=true; + +usepackage("mflogo"); + usersetting(); viewportsize=pagewidth-2pagemargin; @@ -18,23 +20,39 @@ viewportsize=pagewidth-2pagemargin; bibliographystyle("alpha"); itempen=fontsize(22pt); - -titlepage("Asymptote: The Vector Graphics Language", - "Andy Hammerlindl and John Bowman", - "University of Toronto and University of Alberta","August 16, 2007", - "http://asymptote.sf.net"); +defaultpen(itempen); +viewportmargin=(2,2); + +titlepage(long ? "Asymptote: The Vector Graphics Language" : + "Interactive TeX-Aware 3D Vector Graphics", + "John Bowman and Andy Hammerlindl", +"Department of Mathematical and Statistical Sciences\\ + University of Alberta\\ +%and Instituto Nacional de Matem\'atica Pura e Aplicada (IMPA) +\medskip\Green{Collaborators: Orest Shardt, Michail Vidiassov}", +"June 30, 2010", +"http://asymptote.sf.net/intro.pdf"); title("History"); -item("\TeX\ and METAFONT (Knuth, 1979)"); -item("MetaPost (Hobby, 1989): 2D Bezier Control Point Selection"); -item("Asymptote (Hammerlindl, Bowman, Prince, 2004): 2D \& 3D Graphics"); - -title("Statistics (as of April, 2007)"); -item("Runs on Windows, Mac OS X, Linux, etc."); -item("1800 downloads a month from {\tt asymptote.sourceforge.net}."); -item("33\ 000 lines of C++ code."); -item("18\ 000 lines of Asymptote code."); - +item("1979: \TeX\ and \MF\ (Knuth)"); +item("1986: 2D B\'ezier control point selection (Hobby)"); +item("1989: MetaPost (Hobby)"); +item("2004: Asymptote"); +subitem("2004: initial public release (Hammerlindl, Bowman, \& Prince)"); +subitem("2005: 3D B\'ezier control point selection (Bowman)"); +subitem("2008: 3D interactive \TeX\ within PDF files (Shardt \& Bowman)"); +subitem("2009: 3D billboard labels that always face camera (Bowman)"); +subitem("2010: 3D PDF enhancements (Vidiassov \& Bowman)"); + +title("Statistics (as of June, 2010)"); +item("Runs under Linux/UNIX, Mac OS X, Microsoft Windows."); +item("4000 downloads/month from primary\hfill\\ + {\tt asymptote.sourceforge.net} site alone."); +item("80\ 000 lines of low-level C++ code."); +item("36\ 000 lines of high-level Asymptote code."); +item("Latest stable release: Version 2.00 (LGPL)."); + +if(long) { title("Vector Graphics"); item("Raster graphics assign colors to a grid of pixels."); figure("pixel.pdf"); @@ -61,17 +79,24 @@ add(zoom(100), (0,0)); add(zoom(10), (200,0)); add(zoom(1), (400,0)); ")); +} title("Cartesian Coordinates"); + +item("Asymptote's graphical capabilities are based on four primitive + commands: {\tt draw}, {\tt label}, {\tt fill}, {\tt clip} \cite{Bowman08}"); + asyfilecode("diagonal"); item("units are {\tt PostScript} {\it big points\/} (1 {\tt bp} = 1/72 {\tt inch})"); item("{\tt --} means join the points with a linear segment to create a {\it path}"); -item("cyclic path:"); +item("{\it cyclic\/} path:"); -asyfilecode("square"); +asycode(" +draw((0,0)--(100,0)--(100,100)--(0,100)--cycle); +"); title("Scaling to a Given Size"); @@ -79,11 +104,7 @@ item("{\tt PostScript} units are often inconvenient."); item("Instead, scale user coordinates to a specified final size:"); -code(" -size(101,101); -draw((0,0)--(1,0)--(1,1)--(0,1)--cycle); -"); -asyfigure("square"); +asyfilecode("square"); item("One can also specify the size in {\tt cm}:"); @@ -96,18 +117,36 @@ title("Labels"); item("Adding and aligning \LaTeX\ labels is easy:"); -asyfilecode("labelsquare","height=6cm"); - +asycode(preamble="defaultpen(fontsize("+string(fontsize(itempen))+"));", +"size(6cm); +draw(unitsquare); +label(\"$A$\",(0,0),SW); +label(\"$B$\",(1,0),SE); +label(\"$C$\",(1,1),NE); +label(\"$D$\",(0,1),NW); +"); -title("2D Bezier Splines"); +title("2D B\'ezier Splines"); -item("Using {\tt ..} instead of {\tt --} specifies a {\it Bezier cubic +item("Using {\tt ..} instead of {\tt --} specifies a {\it B\'ezier cubic spline}:"); code(" draw(z0 .. controls c0 and c1 .. z1,blue); "); -asyfigure("beziercurve","height=7cm"); +asyfigure(asywrite("defaultpen(fontsize("+string(fontsize(itempen))+")); +size(0,7cm); +pair z0=(0,0); +pair c0=(1,1); +pair c1=(2,1); +pair z1=(3,0); +draw(z0..controls c0 and c1 .. z1,blue); +draw(z0--c0--c1--z1,dashed); +dot(\"$z_0$\",z0,W,red); +dot(\"$c_0$\",c0,NW,red); +dot(\"$c_1$\",c1,NE,red); +dot(\"$z_1$\",z1,red); +")); equation("(1-t)^3 z_0+3t(1-t)^2 c_0+3t^2(1-t) c_1+t^3 z_1, \qquad t\in [0,1]."); @@ -139,7 +178,7 @@ dot(z); picture output; save(); -for (int i=0; i<length(p); ++i) { +for(int i=0; i<length(p); ++i) { pair z=point(p,i), dir=dir(p,i); draw((z-0.3dir)--(z+0.3dir), Arrow); } @@ -148,7 +187,7 @@ restore(); save(); guide g; -for (int i=0; i<length(p); ++i) { +for(int i=0; i<length(p); ++i) { dot(precontrol(p,i)); dot(postcontrol(p,i)); g=g--precontrol(p,i)--point(p,i)--postcontrol(p,i); @@ -161,16 +200,18 @@ shipout(output); ")); title("Filling"); -item("Use {\tt fill} to fill the inside of a path:"); +item("The {\tt fill} primitive to fill the inside of a path:"); asycode(preamble="size(0,200);"," path star; -for (int i=0; i<5; ++i) +for(int i=0; i < 5; ++i) star=star--dir(90+144i); star=star--cycle; -fill(shift(-1,0)*star,orange+zerowinding); -draw(shift(-1,0)*star,linewidth(3)); -fill(shift(1,0)*star,blue+evenodd); -draw(shift(1,0)*star,linewidth(3)); + +fill(star,orange+zerowinding); +draw(star,linewidth(3)); + +fill(shift(2,0)*star,blue+evenodd); +draw(shift(2,0)*star,linewidth(3)); "); title("Filling"); @@ -181,29 +222,23 @@ fill(p,green+zerowinding); "); title("Clipping"); -item("Pictures can be clipped to lie inside a path:"); +item("Pictures can be clipped to a path:"); asycode(preamble=" size(0,200); guide star; -for (int i=0; i<5; ++i) +for(int i=0; i<5; ++i) star=star--dir(90+144i); star=star--cycle;"," fill(star,orange+zerowinding); clip(scale(0.7)*unitcircle); draw(scale(0.7)*unitcircle); "); -item("All of Asymptote's graphical capabilities are based on four primitive - commands: {\tt draw}, {\tt fill}, {\tt clip}, and {\tt label}."); title("Affine Transforms"); -item("Affine transformations: shifts, rotations, reflections, and scalings."); -code(" -transform t=rotate(90); -write(t*(1,0)); // Writes (0,1). -"); +item("Affine transformations: shifts, rotations, reflections, and scalings + can be applied to pairs, paths, pens, strings, and even whole pictures:"); -item("Pairs, paths, pens, strings, and whole pictures can be transformed."); code(" fill(P,blue); fill(shift(2,0)*reflect((0,0),(0,1))*P, red); @@ -231,6 +266,7 @@ fill(shift(4,0)*rotate(30)*P, yellow); fill(shift(6,0)*yscale(0.7)*xscale(2)*P, green); ")); +if(long) { title("C++/Java-like Programming Syntax"); code("// Declaration: Declare x to be real: @@ -250,287 +286,11 @@ if(x == 1.0) { for(int i=0; i < 10; ++i) { write(i); }"); - -title("Helpful Math Notation"); - -item("Integer division returns a {\tt real}. Use {\tt quotient} for an integer - result:"); -code("3/4==0.75 quotient(3,4)==0"); - -item("Caret for real and integer exponentiation:"); -code("2^3 2.7^3 2.7^3.2"); - -item("Many expressions can be implicitly scaled by a numeric constant:"); -code("2pi 10cm 2x^2 3sin(x) 2(a+b)"); - -item("Pairs are complex numbers:"); -code("(0,1)*(0,1)==(-1,0)"); - -title("Function Calls"); - -item("Functions can take default arguments in any position. Arguments are - matched to the first possible location:"); -string unitsize="unitsize(0.65cm);"; -string preamble="void drawEllipse(real xsize=1, real ysize=xsize, pen p=blue) { - draw(xscale(xsize)*yscale(ysize)*unitcircle, p); -} -"; - -asycode(preamble=unitsize,preamble+" -drawEllipse(2); -drawEllipse(red); -"); - -item("Arguments can be given by name:"); -asycode(preamble=unitsize+preamble," -drawEllipse(xsize=2, ysize=1); -drawEllipse(ysize=2, xsize=3, green); -"); - -title("Rest Arguments"); -item("Rest arguments allow one to write a function that takes an arbitrary - number of arguments:"); -code(" -int sum(... int[] nums) { - int total=0; - for (int i=0; i < nums.length; ++i) - total += nums[i]; - return total; -} - -sum(1,2,3,4); // returns 10 -sum(); // returns 0 -sum(1,2,3 ... new int[] {4,5,6}); // returns 21 - -int subtract(int start ... int[] subs) { - return start - sum(... subs); -} -"); - -title("Higher-Order Functions"); - -item("Functions are first-class values. They can be passed to other - functions:"); -code("real f(real x) { - return x*sin(10x); -} -draw(graph(f,-3,3,300),red);"); -asyfigure(asywrite(" -import graph; -size(300,0); -real f(real x) { - return x*sin(10x); -} -draw(graph(f,-3,3,300),red); -")); - -title("Higher-Order Functions"); -item("Functions can return functions:"); -equation("f_n(x)=n\sin\left(\frac{x}{n}\right)."); -skip(); -string preamble=" -import graph; -size(300,0); -"; -string graphfunc2=" -typedef real func(real); -func f(int n) { - real fn(real x) { - return n*sin(x/n); - } - return fn; -} - -func f1=f(1); -real y=f1(pi); - -for (int i=1; i<=5; ++i) - draw(graph(f(i),-10,10),red); -"; -code(graphfunc2); -string name=asywrite(graphfunc2,preamble=preamble); -asy(nativeformat(),name+".asy"); -label(graphic(name+"."+nativeformat()),(0.5,0), - Fill(figureborder,figuremattpen)); - -title("Anonymous Functions"); - -item("Create new functions with {\tt new}:"); -code(" -path p=graph(new real (real x) { return x*sin(10x); },-3,3,red); - -func f(int n) { - return new real (real x) { return n*sin(x/n); }; -}"); - -item("Function definitions are just syntactic sugar for assigning function -objects to variables."); -code(" -real square(real x) { - return x^2; -} -"); - -remark("is equivalent to"); -code(" -real square(real x); -square=new real (real x) { - return x^2; -}; -"); - -title("Structures"); - -item("As in other languages, structures group together data."); -code(" -struct Person { - string firstname, lastname; - int age; -} -Person bob=new Person; -bob.firstname=\"Bob\"; -bob.lastname=\"Chesterton\"; -bob.age=24; -"); - -item("Any code in the structure body will be executed every time a new structure - is allocated..."); -code(" -struct Person { - write(\"Making a person.\"); - string firstname, lastname; - int age=18; -} -Person eve=new Person; // Writes \"Making a person.\" -write(eve.age); // Writes 18. -"); - -title("Object-Oriented Programming"); -item("Functions are defined for each instance of a structure."); -code(" -struct Quadratic { - real a,b,c; - real discriminant() { - return b^2-4*a*c; - } - real eval(real x) { - return a*x^2 + b*x + c; - } -} -"); - -item("This allows us to construct ``methods'' which are just normal functions - declared in the environment of a particular object:"); -code(" -Quadratic poly=new Quadratic; -poly.a=-1; poly.b=1; poly.c=2; - -real f(real x)=poly.eval; -real y=f(2); -draw(graph(poly.eval, -5, 5)); -"); - -title("Specialization"); - -item("Can create specialized objects just by redefining methods:"); -code(" -struct Shape { - void draw(); - real area(); -} - -Shape rectangle(real w, real h) { - Shape s=new Shape; - s.draw = new void () { - fill((0,0)--(w,0)--(w,h)--(0,h)--cycle); }; - s.area = new real () { return w*h; }; - return s; -} - -Shape circle(real radius) { - Shape s=new Shape; - s.draw = new void () { fill(scale(radius)*unitcircle); }; - s.area = new real () { return pi*radius^2; } - return s; -} -"); - -title("Overloading"); -item("Consider the code:"); -code(" -int x1=2; -int x2() { - return 7; -} -int x3(int y) { - return 2y; -} - -write(x1+x2()); // Writes 9. -write(x3(x1)+x2()); // Writes 11. -"); - -title("Overloading"); -item("{\tt x1}, {\tt x2}, and {\tt x3} are never used in the same context, so - they can all be renamed {\tt x} without ambiguity:"); -code(" -int x=2; -int x() { - return 7; -} -int x(int y) { - return 2y; } -write(x+x()); // Writes 9. -write(x(x)+x()); // Writes 11. -"); - -item("Function definitions are just variable definitions, but variables are - distinguished by their signatures to allow overloading."); - -title("Operators"); -item("Operators are just syntactic sugar for functions, and can be addressed or - defined as functions with the {\tt operator} keyword."); -code(" -int add(int x, int y)=operator +; -write(add(2,3)); // Writes 5. - -// Don't try this at home. -int operator +(int x, int y) { - return add(2x,y); -} -write(2+3); // Writes 7. -"); -item("This allows operators to be defined for new types."); - -title("Operators"); -item("Operators for constructing paths are also functions:"); -code("a.. controls b and c .. d--e"); -remark("is equivalent to"); -code( - "operator --(operator ..(a, operator controls(b,c), d), e)"); -item("This allowed us to redefine all of the path operators for 3D paths."); -asyfigure("helix","height=10cm"); - -title("Packages"); - -item("Function and structure definitions can be grouped into packages:"); -code(" -// powers.asy -real square(real x) { return x^2; } -real cube(real x) { return x^3; } -"); -remark("and imported:"); -code(" -import powers; -real eight=cube(2.0); -draw(graph(powers.square, -1, 1)); -"); - -title("Packages"); +title("Modules"); -item("There are packages for Feynman diagrams,"); +item("There are modules for Feynman diagrams,"); asyfigure("eetomumu","height=6cm"); remark("data structures,"); asyfigure(asywrite(" @@ -547,6 +307,7 @@ equations("\Phi\Phi(x_1,x_2,x_3,x_4,x_5) + &\rho_{4a}(x_1,x_2+x_3,x_4,x_5) - \rho_{4b}(x_1,x_2,x_3,x_4+x_5) \\ - &\rho_{4a}(x_1+x_2,x_3,x_4,x_5) - \rho_{4a}(x_1,x_2,x_4,x_5)."); +if(long) { title("Textbook Graph"); asy(nativeformat(),"exp"); filecode("exp.asy"); @@ -564,18 +325,20 @@ asyfilecode("filegraph","height=15cm",newslide=true); title("Logarithmic Graph"); asyfilecode("loggraph","height=15cm",newslide=true); - title("Secondary Axis"); +} else +title("Scientific Graph"); + asyfigure("secondaryaxis","height=15cm"); -title("Images"); +title("Images and Contours"); asyfigure("imagecontour","height=17cm"); title("Multiple Graphs"); asyfigure("diatom","height=17cm"); title("Hobby's 2D Direction Algorithm"); -item("A tridiagonal system of linear equations is solved to determine any unspecified directions $\theta_k$ and $\phi_k$ through each knot $z_k$:"); +item("A tridiagonal system of linear equations is solved to determine any unspecified directions $\phi_k$ and $\theta_k$ through each knot $z_k$:"); equation("\frac{\theta_{k-1}-2\phi_k}{\ell_k}= \frac{\phi_{k+1}-2\theta_k}{\ell_{k+1}}."); @@ -584,39 +347,43 @@ asyfigure("Hobbydir","height=9cm"); item("The resulting shape may be adjusted by modifying optional {\it tension\/} parameters and {\it curl\/} boundary conditions."); -//involving the curvature - title("Hobby's 2D Control Point Algorithm"); item("Having prescribed outgoing and incoming path directions $e^{i\theta}$ at node~$z_0$ and $e^{i\phi}$ at node $z_1$ relative to the vector $z_1-z_0$, the control points are determined as:"); +skip(-3); + equations("u&=&z_0+e^{i\theta}(z_1-z_0)f(\theta,-\phi),\nonumber\\ v&=&z_1-e^{i\phi}(z_1-z_0)f(-\phi,\theta),"); +skip(-3); + remark("where the relative distance function $f(\theta,\phi)$ is given by Hobby [1986]."); asyfigure("Hobbycontrol","height=9cm"); -title("Bezier Curves in 3D"); +if(long) { +title("B\'ezier Curves in 3D"); item("Apply an affine transformation"); equation("x'_i=A_{ij} x_j+C_i"); -remark("to a Bezier curve:"); +remark("to a B\'ezier curve:"); -equation("x(t)=\sum_{k=0}^3 B_k(t) P_k, \qquad t\in [0,1]."); +equation("\displaystyle x(t)=\sum_{k=0}^3 B_k(t) P_k, \qquad t\in [0,1]."); -item("The resulting curve is also a Bezier curve:"); +item("The resulting curve is also a B\'ezier curve:"); equations("x'_i(t)&=&\sum_{k=0}^3 B_k(t) A_{ij}(P_k)_j+C_i\nonumber\\ &=&\sum_{k=0}^3 B_k(t) P'_k,"); remark("where $P'_k$ is the transformed $k^{\rm th}$ control point, noting $\displaystyle\sum_{k=0}^3 B_k(t)=1.$"); +} -title("3D Generalization of Hobby's algorithm"); +title("3D Generalization of Direction Algorithm"); item("Must reduce to 2D algorithm in planar case."); @@ -625,12 +392,12 @@ item("Determine directions by applying Hobby's algorithm in the plane containing // Reformulate Hobby's equations in terms of the angle $\psi_k=$ item("The only ambiguity that can arise is the overall sign of the angles, which relates to viewing each 2D plane from opposing normal directions."); -item("A reference vector based on the mean unit normal of successive segments can be used to resolve such ambiguities."); +item("A reference vector based on the mean unit normal of successive segments can be used to resolve such ambiguities \cite{Bowman07,Bowman09}"); title("3D Control Point Algorithm"); -item("Hobby's control point algorithm can be generalized to 3D by expressing it in terms of the absolute directions $\omega_0$ and $\omega_1$:"); - +item("Express Hobby's algorithm in terms of the absolute directions $\omega_0$ and~$\omega_1$:"); +skip(-1); equation("u=z_0+\omega_0\left|z_1-z_0\right|f(\theta,-\phi),"); equation("v=z_1-\omega_1\left|z_1-z_0\right|f(-\phi,\theta),"); @@ -638,29 +405,46 @@ asyfigure("Hobbycontrol"); remark("interpreting $\theta$ and $\phi$ as the angle between the corresponding path direction vector and $z_1-z_0$."); -item("In this case there is an unambiguous reference vector for determining the relative sign of the angles $\phi$ and $\theta$."); +item("Here there is an unambiguous reference vector for determining the relative sign of the angles $\phi$ and $\theta$."); -viewportmargin=(0,0.5cm); -defaultpen(1.0); +viewportmargin=(2,0.5cm); +//defaultpen(1.0); title("Interactive 3D Saddle"); -item("A unit circle in the $X$--$Y$ plane may be filled and drawn with: -(1,0,0)..(0,1,0)..(-1,0,0)..(0,-1,0)..cycle"); +item("A unit circle in the $X$--$Y$ plane may be constructed with: +{\tt (1,0,0)..(0,1,0)..(-1,0,0)..(0,-1,0)..cycle}:"); asyinclude("unitcircle3",8cm); -remark("and then distorted into a saddle:\\ (1,0,0)..(0,1,1)..(-1,0,0)..(0,-1,1)..cycle"); +remark("and then distorted into the saddle\\ +{\tt (1,0,0)..(0,1,1)..(-1,0,0)..(0,-1,1)..cycle}:"); asyinclude("saddle",8cm); +//defaultpen(0.5); + +title("Lifting TeX to 3D"); +item("Glyphs are first split into simply connected regions and then decomposed into planar B\'ezier surface patches \cite{Bowman09,Shardt10}:"); +asyfigure("../examples/partitionExample"); + +viewportmargin=(2,1cm); +title("Label Manipulation"); +item("They can then be extruded and/or arbitrarily transformed:"); +asyinclude("../examples/label3solid"); + +title("Billboard Labels"); +defaultpen(fontsize(36pt)); +asyinclude("../examples/billboard",15cm); +defaultpen(itempen); -viewportmargin=(0,2cm); title("Smooth 3D surfaces"); -asyinclude("GaussianSurface",15cm); -defaultpen(0.5); +asyinclude("../examples/sinc",25cm); + +title("Curved 3D Arrows"); +asyinclude("../examples/arrows3",20cm); title("Slide Presentations"); -item("Asymptote has a package for preparing slides."); +item("Asymptote has a module for preparing slides."); item("It even supports embedded high-resolution PDF movies."); code(' title("Slide Presentations"); -item("Asymptote has a package for preparing slides."); +item("Asymptote has a module for preparing slides."); item("It even supports embedded high-resolution PDF movies."); '); remark("\quad\ldots"); @@ -729,8 +513,8 @@ frame cardsize(real w=0, real h=0, bool keepAspect=Aspect) { guide g=polargraph(f,0,2pi,operator ..)--cycle; filldraw(pic,g,pink); - xaxis(pic,\"$x$\"); - yaxis(pic,\"$y$\"); + xaxis(pic,\"$x$\",above=true); + yaxis(pic,\"$y$\",above=true); dot(pic,\"$(a,0)$\",(1,0),N); dot(pic,\"$(2a,0)$\",(2,0),N+E); @@ -748,7 +532,7 @@ add(cardsize(0,200), (540,0)); title("Deferred Drawing"); item("We can't draw a graphical object until we know the scaling factors for the user coordinates."); -item("Instead, store a function that when given the scaling information, draws +item("Instead, store a function that, given the scaling information, draws the scaled object."); code(" void draw(picture pic=currentpicture, path g, pen p=currentpen) { @@ -791,7 +575,7 @@ pic.addPoint(max(g),max(p));"); item("Filling ignores the pen width:"); code("pic.addPoint(min(g),(0,0)); pic.addPoint(max(g),(0,0));"); -item("Communicate with \LaTeX\ to determine label sizes:"); +item("Communicate with \LaTeX\ {\it via\/} a pipe to determine label sizes:"); asyfigure(asywrite(" size(0,100); @@ -807,14 +591,16 @@ title("Sizing"); item("When scaling the final figure to a given size $S$, we first need to determine a scaling factor $a>0$ and a shift $b$ so that all of the - coordinates when transformed will lie in the interval $[0,S]$. That is, if - $u$ and $t$ are the user and truesize components:"); + coordinates when transformed will lie in the interval $[0,S]$."); + +item("That is, if $u$ and $t$ are the user and truesize components:"); equation("0\le au+t+b \le S."); -item("We are maximizing the variable $a$ subject to a number of inequalities. - This is a linear programming problem that can be solved by the simplex - method."); +item("Maximize the variable $a$ subject to a number of inequalities."); +item("Use the simplex method to solve the resulting linear programming problem."); + +if(long) { title("Sizing"); item("Every addition of a coordinate $(t,u)$ adds two restrictions"); equation("au+t+b\ge 0,"); @@ -829,7 +615,7 @@ asyfigure(asywrite(" import palette; size(160,0); pen[] p=Rainbow(NColors=11); -for (int i=1; i<10; ++i) { +for(int i=1; i<10; ++i) { draw(scale(i)*unitcircle, p[i]+linewidth(2)); } ")); @@ -845,6 +631,7 @@ item("This defines a partial ordering on coordinates. When sizing a picture, item("In practice, the linear programming problem will have less than a dozen restraints."); item("All picture sizing is implemented in Asymptote code."); +} title("Infinite Lines"); item("Deferred drawing allows us to draw infinite lines."); @@ -852,59 +639,321 @@ code("drawline(P, Q);"); asyfigure("elliptic","height=12cm"); -title("A Final Example: Quilting"); +title("Helpful Math Notation"); + +item("Integer division returns a {\tt real}. Use {\tt quotient} for an integer + result:"); +code("3/4 == 0.75 quotient(3,4) == 0"); + +item("Caret for real and integer exponentiation:"); +code("2^3 2.7^3 2.7^3.2"); + +item("Many expressions can be implicitly scaled by a numeric constant:"); +code("2pi 10cm 2x^2 3sin(x) 2(a+b)"); + +item("Pairs are complex numbers:"); +code("(0,1)*(0,1) == (-1,0)"); + +title("Function Calls"); + +item("Functions can take default arguments in any position. Arguments are + matched to the first possible location:"); +string unitsize="unitsize(0.65cm);"; +string preamble="void drawEllipse(real xsize=1, real ysize=xsize, pen p=blue) { + draw(xscale(xsize)*yscale(ysize)*unitcircle, p); +} +"; + +asycode(preamble=unitsize,preamble+" +drawEllipse(2); +drawEllipse(red); +"); + +item("Arguments can be given by name:"); +asycode(preamble=unitsize+preamble," +drawEllipse(xsize=2, ysize=1); +drawEllipse(ysize=2, xsize=3, green); +"); + +if(long) { +title("Rest Arguments"); +item("Rest arguments allow one to write a function that takes an arbitrary + number of arguments:"); +code(" +int sum(... int[] nums) { + int total=0; + for(int i=0; i < nums.length; ++i) + total += nums[i]; + return total; +} + +sum(1,2,3,4); // returns 10 +sum(); // returns 0 +sum(1,2,3 ... new int[] {4,5,6}); // returns 21 + +int subtract(int start ... int[] subs) { + return start - sum(... subs); +} +"); +} + +title("High-Order Functions"); + +item("Functions are first-class values. They can be passed to other + functions:"); +code("import graph; +real f(real x) { + return x*sin(10x); +} +draw(graph(f,-3,3,300),red);"); asyfigure(asywrite(" -import math; +import graph; +size(300,0); +real f(real x) { + return x*sin(10x); +} +draw(graph(f,-3,3,300),red); +")); -int n=8, skip=3; +if(long) { +title("Higher-Order Functions"); +item("Functions can return functions:"); +equation("f_n(x)=n\sin\left(\frac{x}{n}\right)."); +skip(); +string preamble=" +import graph; +size(300,0); +"; +string graphfunc2=" +typedef real func(real); +func f(int n) { + real fn(real x) { + return n*sin(x/n); + } + return fn; +} -pair r(int k) { return unityroot(n,k); } +func f1=f(1); +real y=f1(pi); + +for(int i=1; i<=5; ++i) + draw(graph(f(i),-10,10),red); +"; +code(graphfunc2); +string name=asywrite(graphfunc2,preamble=preamble); +asy(nativeformat(),name+".asy"); +label(graphic(name+"."+nativeformat()),(0.5,0), + Fill(figureborder,figuremattpen)); -pen col=blue, col2=purple; +title("Anonymous Functions"); -guide square=box((1,1),(-1,-1)); +item("Create new functions with {\tt new}:"); +code(" +path p=graph(new real (real x) { return x*sin(10x); },-3,3,red); -guide step(int mult) -{ - guide g; - for (int k=0; k<n; ++k) - g=g--r(mult*k); - g=g--cycle; - return g; +func f(int n) { + return new real (real x) { return n*sin(x/n); }; +}"); + +item("Function definitions are just syntactic sugar for assigning function +objects to variables."); +code(" +real square(real x) { + return x^2; } +"); -guide oct=step(1), star=step(skip); +remark("is equivalent to"); +code(" +real square(real x); +square=new real (real x) { + return x^2; +}; +"); -guide wedge(pair z, pair v, real r, real a) -{ - pair w=expi(a/2.0); - v=unit(v)*r; - return shift(z)*((0,0)--v*w--v*conj(w)--cycle); +title("Structures"); + +item("As in other languages, structures group together data."); +code(" +struct Person { + string firstname, lastname; + int age; } +Person bob=new Person; +bob.firstname=\"Bob\"; +bob.lastname=\"Chesterton\"; +bob.age=24; +"); -filldraw(square, col); -filldraw(oct, yellow); +item("Any code in the structure body will be executed every time a new structure + is allocated..."); +code(" +struct Person { + write(\"Making a person.\"); + string firstname, lastname; + int age=18; +} +Person eve=new Person; // Writes \"Making a person.\" +write(eve.age); // Writes 18. +"); -// The interior angle of the points of the star. -real intang=pi*(1-((real)2skip)/((real)n)); +title("Modules"); -for (int k=0; k<n; ++k) { - pair z=midpoint(r(k)--r(k+1)); - guide g=wedge(z,-z,1,intang); - filldraw(g,col2); +item("Function and structure definitions can be grouped into modules:"); +code(" +// powers.asy +real square(real x) { return x^2; } +real cube(real x) { return x^3; } +"); +remark("and imported:"); +code(" +import powers; +real eight=cube(2.0); +draw(graph(powers.square, -1, 1)); +"); } -fill(star,yellow); -filldraw(star,evenodd+col); +title("Object-Oriented Programming"); +item("Functions are defined for each instance of a structure."); +code(" +struct Quadratic { + real a,b,c; + real discriminant() { + return b^2-4*a*c; + } + real eval(real x) { + return a*x^2 + b*x + c; + } +} +"); -size(5inch,0); -")); +item("This allows us to construct ``methods'' which are just normal functions + declared in the environment of a particular object:"); +code(" +Quadratic poly=new Quadratic; +poly.a=-1; poly.b=1; poly.c=2; + +real f(real x)=poly.eval; +real y=f(2); +draw(graph(poly.eval, -5, 5)); +"); + +title("Specialization"); + +item("Can create specialized objects just by redefining methods:"); +code(" +struct Shape { + void draw(); + real area(); +} + +Shape rectangle(real w, real h) { + Shape s=new Shape; + s.draw = new void () { + fill((0,0)--(w,0)--(w,h)--(0,h)--cycle); }; + s.area = new real () { return w*h; }; + return s; +} + +Shape circle(real radius) { + Shape s=new Shape; + s.draw = new void () { fill(scale(radius)*unitcircle); }; + s.area = new real () { return pi*radius^2; } + return s; +} +"); + +title("Overloading"); +item("Consider the code:"); +code(" +int x1=2; +int x2() { + return 7; +} +int x3(int y) { + return 2y; +} + +write(x1+x2()); // Writes 9. +write(x3(x1)+x2()); // Writes 11. +"); + +title("Overloading"); +item("{\tt x1}, {\tt x2}, and {\tt x3} are never used in the same context, so + they can all be renamed {\tt x} without ambiguity:"); +code(" +int x=2; +int x() { + return 7; +} +int x(int y) { + return 2y; +} + +write(x+x()); // Writes 9. +write(x(x)+x()); // Writes 11. +"); + +item("Function definitions are just variable definitions, but variables are + distinguished by their signatures to allow overloading."); + +title("Operators"); +item("Operators are just syntactic sugar for functions, and can be addressed or + defined as functions with the {\tt operator} keyword."); +code(" +int add(int x, int y)=operator +; +write(add(2,3)); // Writes 5. + +// Don't try this at home. +int operator +(int x, int y) { + return add(2x,y); +} +write(2+3); // Writes 7. +"); +item("This allows operators to be defined for new types."); + +title("Operators"); +item("Operators for constructing paths are also functions:"); +code("a.. controls b and c .. d--e"); +remark("is equivalent to"); +code( + "operator --(operator ..(a, operator controls(b,c), d), e)"); +item("This allowed us to redefine all of the path operators for 3D paths."); + +title("Summary"); + +item("Asymptote:"); +subitem("uses IEEE floating point numerics;"); +subitem("uses C++/Java-like syntax;"); +subitem("supports deferred drawing for automatic picture sizing;"); +subitem("supports Grayscale, RGB, CMYK, and HSV colour spaces;"); +subitem("supports PostScript shading, pattern fills, and function shading;"); +subitem("can fill nonsimply connected regions;"); +subitem("generalizes MetaPost path construction algorithms to 3D;"); +subitem("lifts \TeX\ to 3D;"); +subitem("supports 3D billboard labels and PDF grouping."); bibliography("refs"); -viewportsize=viewportmargin=0; +viewportmargin=(2,2); +viewportsize=0; +defaultpen(0.5); title("\mbox{Asymptote: 2D \& 3D Vector Graphics Language}"); asyinclude("../examples/logo3"); skip(); center("\tt http://asymptote.sf.net"); -center("(freely available under the GNU public license)"); +center("(freely available under the LGPL license)"); + +// LocalWords: pdflatex mflogo viewportsize pagewidth pagemargin goysr bibtex +// LocalWords: itempen defaultrender medskip Orest Shardt Vidiassov MF ezier +// LocalWords: Hammerlindl MetaPost PDF hfill LGPL pdf asywrite zoombox LaTeX +// LocalWords: asyfilecode PostScript asycode unitsquare beziercurve grey bw +// LocalWords: lightgrey zerowinding evenodd sw unitsize drawEllipse nums fn +// LocalWords: frac graphfunc func nativeformat figureborder figuremattpen bt +// LocalWords: firstname lastname eval eetomumu binarytree filecode datagraph +// LocalWords: lineargraph filegraph loggraph secondaryaxis imagecontour ij +// LocalWords: tridiagonal Hobbydir nonumber Hobbycontrol th viewportmargin +// LocalWords: asyinclude dotpen wheelpoint yequals xaxis yaxis cardsize mc +// LocalWords: polargraph filldraw addPoint lightblue truesize le au NColors +// LocalWords: drawline unityroot mult oct intang IEEE numerics HSV colour +// LocalWords: nonsimply diff --git a/Build/source/utils/asymptote/doc/extra/intro_.bbl b/Build/source/utils/asymptote/doc/extra/intro_.bbl index b3e55e47eee..cf591457f05 100644 --- a/Build/source/utils/asymptote/doc/extra/intro_.bbl +++ b/Build/source/utils/asymptote/doc/extra/intro_.bbl @@ -1,4 +1,23 @@ -\begin{thebibliography}{Knu86} +\begin{thebibliography}{Bow07} + +\bibitem[BH08]{Bowman08} +John~C. Bowman and Andy Hammerlindl. +\newblock Asymptote: A vector graphics language. +\newblock {\em TUGboat: The Communications of the \TeX\ Users Group}, + 29(2):288--294, 2008. + +\bibitem[Bow07]{Bowman07} +John~C. Bowman. +\newblock {The 3D {A}symptote generalization of MetaPost B\'ezier + interpolation}. +\newblock {\em Proceedings in Applied Mathematics and Mechanics}, + 7(1):2010021--2010022, 2007. + +\bibitem[BS09]{Bowman09} +John~C. Bowman and Orest Shardt. +\newblock Asymptote: Lifting {\TeX} to three dimensions. +\newblock {\em TUGboat: The Communications of the \TeX\ Users Group}, + 30(1):58--63, 2009. \bibitem[Hob86]{Hobby86} John~D. Hobby. @@ -7,7 +26,13 @@ John~D. Hobby. \bibitem[Knu86]{Knuth86b} Donald~E. Knuth. -\newblock {\em The METAFONTbook}. +\newblock {\em The \MF{}book}. \newblock Addison-Wesley, Reading, Massachusetts, 1986. +\bibitem[SB10]{Shardt10} +Orest Shardt and John~C. Bowman. +\newblock Surface parametrization of nonsimply connected planar {B\'ezier} + regions. +\newblock {\em Submitted to Computer Aided Design}, 2010. + \end{thebibliography} diff --git a/Build/source/utils/asymptote/doc/latexusage-1.asy b/Build/source/utils/asymptote/doc/latexusage-1.asy new file mode 100644 index 00000000000..7f0d6a2b3aa --- /dev/null +++ b/Build/source/utils/asymptote/doc/latexusage-1.asy @@ -0,0 +1,55 @@ +if(!settings.multipleView) + settings.batchView=false; +defaultfilename="latexusage-1"; +if(settings.render < 0) settings.render=4; +settings.inlineimage=true; +settings.embed=true; +settings.outformat=""; +settings.toolbar=false; +viewportmargin=(2,2); + +// Global Asymptote definitions can be put here. +import three; +usepackage("bm"); +texpreamble("\def\V#1{\bm{#1}}"); +// One can globally override the default toolbar settings here: +// settings.toolbar=true; + +size(4cm,0); +pen colour1=red; +pen colour2=green; + +pair z0=(0,0); +pair z1=(-1,0); +pair z2=(1,0); +real r=1.5; +path c1=circle(z1,r); +path c2=circle(z2,r); +fill(c1,colour1); +fill(c2,colour2); + +picture intersection=new picture; +fill(intersection,c1,colour1+colour2); +clip(intersection,c2); + +add(intersection); + +draw(c1); +draw(c2); + +//draw("$\A$",box,z1); // Requires [inline] package option. +//draw(Label("$\B$","$B$"),box,z2); // Requires [inline] package option. +draw("$A$",box,z1); +draw("$\V{B}$",box,z2); + +pair z=(0,-2); +real m=3; +margin BigMargin=Margin(0,m*dot(unit(z1-z),unit(z0-z))); + +draw(Label("$A\cap B$",0),conj(z)--z0,Arrow,BigMargin); +draw(Label("$A\cup B$",0),z--z0,Arrow,BigMargin); +draw(z--z1,Arrow,Margin(0,m)); +draw(z--z2,Arrow,Margin(0,m)); + +shipout(bbox(0.25cm)); +viewportsize=(390.0pt,0); diff --git a/Build/source/utils/asymptote/doc/latexusage-2.asy b/Build/source/utils/asymptote/doc/latexusage-2.asy new file mode 100644 index 00000000000..b91be72419f --- /dev/null +++ b/Build/source/utils/asymptote/doc/latexusage-2.asy @@ -0,0 +1,23 @@ +if(!settings.multipleView) + settings.batchView=false; +defaultfilename="latexusage-2"; +if(settings.render < 0) settings.render=4; +settings.inlineimage=true; +settings.embed=true; +settings.outformat=""; +settings.toolbar=false; +viewportmargin=(2,2); + +// Global Asymptote definitions can be put here. +import three; +usepackage("bm"); +texpreamble("\def\V#1{\bm{#1}}"); +// One can globally override the default toolbar settings here: +// settings.toolbar=true; + + +currentprojection=orthographic(5,4,2); +draw(unitcube,blue); +label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); +size(0,4cm); +viewportsize=(390.0pt,0); diff --git a/Build/source/utils/asymptote/doc/latexusage-3.asy b/Build/source/utils/asymptote/doc/latexusage-3.asy new file mode 100644 index 00000000000..d3990c9cbfb --- /dev/null +++ b/Build/source/utils/asymptote/doc/latexusage-3.asy @@ -0,0 +1,38 @@ +if(!settings.multipleView) + settings.batchView=false; +defaultfilename="latexusage-3"; +if(settings.render < 0) settings.render=4; +settings.inlineimage=true; +settings.embed=true; +settings.outformat=""; +settings.toolbar=false; +viewportmargin=(2,2); + +// Global Asymptote definitions can be put here. +import three; +usepackage("bm"); +texpreamble("\def\V#1{\bm{#1}}"); +// One can globally override the default toolbar settings here: +// settings.toolbar=true; + + +pair z0=(0,0); +pair z1=(2,0); +pair z2=(5,0); +pair zf=z1+0.75*(z2-z1); + +draw(z1--z2); +dot(z1,red+0.15cm); +dot(z2,darkgreen+0.3cm); +label("$m$",z1,1.2N,red); +label("$M$",z2,1.5N,darkgreen); +label("$\hat{\ }$",zf,0.2*S,fontsize(24pt)+blue); + +pair s=-0.2*I; +draw("$x$",z0+s--z1+s,N,red,Arrows,Bars,PenMargins); +s=-0.5*I; +draw("$\bar{x}$",z0+s--zf+s,blue,Arrows,Bars,PenMargins); +s=-0.95*I; +draw("$X$",z0+s--z2+s,darkgreen,Arrows,Bars,PenMargins); +size(390.0pt,0); +viewportsize=(390.0pt,0); diff --git a/Build/source/utils/asymptote/doc/latexusage.tex b/Build/source/utils/asymptote/doc/latexusage.tex index bc0638098c2..6324238f1a2 100644 --- a/Build/source/utils/asymptote/doc/latexusage.tex +++ b/Build/source/utils/asymptote/doc/latexusage.tex @@ -16,6 +16,7 @@ \begin{asydef} // Global Asymptote definitions can be put here. +import three; usepackage("bm"); texpreamble("\def\V#1{\bm{#1}}"); // One can globally override the default toolbar settings here: @@ -80,8 +81,6 @@ this requires the optional \verb+\usepackage{attachfile2}+ package and the \verb+{attach=true}+ option: \begin{center} \begin{asy}[height=4cm,attach=false] -import three; -defaultrender.margin=3pt; currentprojection=orthographic(5,4,2); draw(unitcube,blue); label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); diff --git a/Build/source/utils/asymptote/doc/png/Makefile.in b/Build/source/utils/asymptote/doc/png/Makefile.in index 4c01b40d2b7..af5ba0c8b31 100644 --- a/Build/source/utils/asymptote/doc/png/Makefile.in +++ b/Build/source/utils/asymptote/doc/png/Makefile.in @@ -46,5 +46,5 @@ install-all: all install uninstall: -install-info --remove --infodir=$(infodir) asymptote.info -cd $(infodir)/asymptote && rm -f asymptote.info *.png - -rmdir -f $(infodir)/asymptote + -rmdir $(infodir)/asymptote FORCE: diff --git a/Build/source/utils/asymptote/doc/png/asymptote.info b/Build/source/utils/asymptote/doc/png/asymptote.info index 45ab814b89a..af0f271a9d2 100644 --- a/Build/source/utils/asymptote/doc/png/asymptote.info +++ b/Build/source/utils/asymptote/doc/png/asymptote.info @@ -1,7 +1,7 @@ This is asymptote.info, produced by makeinfo version 4.13 from ../asymptote.texi. -This file documents `Asymptote', version 2.00. +This file documents `Asymptote', version 2.01. `http://asymptote.sourceforge.net' @@ -23,7 +23,7 @@ File: asymptote.info, Node: Top, Next: Description, Up: (dir) Asymptote ********* -This file documents `Asymptote', version 2.00. +This file documents `Asymptote', version 2.01. `http://asymptote.sourceforge.net' @@ -89,7 +89,7 @@ Programming * Functions:: Traditional and high-order functions * Arrays:: Dynamic vectors * Casts:: Implicit and explicit casts -* Import:: Importing external `Asymptote' packages +* Import:: Importing external `Asymptote' modules * Static:: Where to allocate your variable? Operators @@ -1382,7 +1382,7 @@ languages. * Functions:: Traditional and high-order functions * Arrays:: Dynamic vectors * Casts:: Implicit and explicit casts -* Import:: Importing external `Asymptote' packages +* Import:: Importing external `Asymptote' modules * Static:: Where to allocate your variable? @@ -2322,10 +2322,10 @@ number, until it saturates with one or more color components equal to 1. lineskip=1.2*size)'. The default font size, 12pt, may be changed with `defaultpen(pen)'. Nonstandard font sizes may require inserting import fontsize; - at the beginning of the file (this requires the `fix-cm' package + at the beginning of the file (this requires the `type1cm' package available from - `http://www.ctan.org/tex-archive/help/Catalogue/entries/fix-cm' + `http://www.ctan.org/tex-archive/help/Catalogue/entries/type1cm' and included in recent `LaTeX' distributions). The font size and line skip of a pen can be examined with the routines `real fontsize(pen p=currentpen)' and `real lineskip(pen p=currentpen)', @@ -3083,6 +3083,12 @@ int x=5; real y=4.3; pen reddash=red+dashed; + `var' may also be used with the extended `for' loop syntax. + +int[] a = {1,2,3}; +for (var x : a) + write(x); + File: asymptote.info, Node: Structures, Next: Operators, Prev: Variable initializers, Up: Programming @@ -4658,7 +4664,11 @@ pdflatex latexusage To switch between using `latex' and `pdflatex' you may first need to remove the files `latexusage-*', `latexusage_.pre', and -`latexusage.aux'. +`latexusage.aux'. Version 1.13 of `Asymptote.sty' supports processing +each figure separately: `asy latexusage' is equivalent to `asy +latexusage-*.asy'. For example, one may wish to reduce memory usage by +generating each figure in a separate `UNIX' process: +/bin/ls latexusage-*.asy | xargs --replace=% asy % One can specify `width', `height', `viewportwidth', `viewportheight', and `attach' `keyval'-style options to the `asy' @@ -4707,6 +4717,7 @@ and `LaTeX' is available at `http://dario.dse.nl/projects/asylatex/'. \begin{asydef} // Global Asymptote definitions can be put here. +import three; usepackage("bm"); texpreamble("\def\V#1{\bm{#1}}"); // One can globally override the default toolbar settings here: @@ -4771,8 +4782,6 @@ this requires the optional \verb+\usepackage{attachfile2}+ package and the \verb+{attach=true}+ option: \begin{center} \begin{asy}[height=4cm,attach=false] -import three; -defaultrender.margin=3pt; currentprojection=orthographic(5,4,2); draw(unitcube,blue); label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); @@ -8519,7 +8528,7 @@ Index (line 6) * atleast: Bezier curves. (line 56) * attach <1>: graph. (line 415) -* attach: LaTeX usage. (line 31) +* attach: LaTeX usage. (line 35) * autoadjust: three. (line 354) * autoimport: Options. (line 110) * automatic scaling: graph. (line 682) @@ -8867,7 +8876,6 @@ Index * firstcut: Paths and guides. (line 247) * fit: Frames and pictures. (line 103) * fit3: three. (line 269) -* fix-cm: Pens. (line 178) * fixedscaling: Frames and pictures. (line 74) * floor: Mathematical functions. (line 26) @@ -8934,7 +8942,7 @@ Index * guide: Paths and guides. (line 300) * guide3: three. (line 6) * hatch: Pens. (line 267) -* height: LaTeX usage. (line 31) +* height: LaTeX usage. (line 35) * help <1>: Debugger. (line 30) * help <2>: Help. (line 6) * help: Interactive mode. (line 44) @@ -9561,6 +9569,7 @@ Index * tube <1>: tube. (line 6) * tube: three. (line 110) * tutorial: Tutorial. (line 6) +* type1cm: Pens. (line 178) * typedef <1>: Functions. (line 36) * typedef: Data types. (line 344) * undefined: Paths and guides. (line 268) @@ -9603,10 +9612,10 @@ Index * verbatim: Frames and pictures. (line 271) * vertex-dependent colors: three. (line 81) * Vertical: flowchart. (line 81) -* viewportheight: LaTeX usage. (line 31) +* viewportheight: LaTeX usage. (line 35) * viewportmargin: three. (line 262) * viewportsize: three. (line 262) -* viewportwidth: LaTeX usage. (line 31) +* viewportwidth: LaTeX usage. (line 35) * views: three. (line 231) * vim: Editing modes. (line 33) * virtual functions: Structures. (line 181) @@ -9617,7 +9626,7 @@ Index * wheel mouse: GUI. (line 6) * while: Programming. (line 29) * white-space string delimiter mode: Arrays. (line 359) -* width: LaTeX usage. (line 31) +* width: LaTeX usage. (line 35) * windingnumber: Paths and guides. (line 268) * word: Arrays. (line 359) * write <1>: Arrays. (line 399) @@ -9688,41 +9697,41 @@ Index Tag Table: Node: Top574 -Node: Description6833 -Node: Installation10334 -Node: UNIX binary distributions11387 -Node: MacOS X binary distributions12493 -Node: Microsoft Windows13377 -Ref: psview14087 -Node: Configuring15008 -Node: Search paths19229 -Node: Compiling from UNIX source20026 -Ref: multisampling20615 -Node: Editing modes23025 -Node: Subversion25457 -Node: Uninstall25920 -Node: Tutorial26270 -Ref: unitcircle30496 -Node: Drawing commands32432 -Node: draw34143 -Ref: arrows35291 -Node: fill40534 -Ref: gradient shading41578 -Node: clip45806 -Node: label46398 -Ref: Label47097 -Node: Bezier curves52822 -Node: Programming56399 -Ref: array iteration57213 -Node: Data types58295 -Ref: format67303 -Node: Paths and guides70906 -Ref: circle71160 -Ref: arctime76648 -Ref: extension80503 -Node: Pens87186 -Ref: fillrule94552 -Ref: basealign95449 +Node: Description6832 +Node: Installation10333 +Node: UNIX binary distributions11386 +Node: MacOS X binary distributions12492 +Node: Microsoft Windows13376 +Ref: psview14086 +Node: Configuring15007 +Node: Search paths19228 +Node: Compiling from UNIX source20025 +Ref: multisampling20614 +Node: Editing modes23024 +Node: Subversion25456 +Node: Uninstall25919 +Node: Tutorial26269 +Ref: unitcircle30495 +Node: Drawing commands32431 +Node: draw34142 +Ref: arrows35290 +Node: fill40533 +Ref: gradient shading41577 +Node: clip45805 +Node: label46397 +Ref: Label47096 +Node: Bezier curves52821 +Node: Programming56398 +Ref: array iteration57212 +Node: Data types58293 +Ref: format67301 +Node: Paths and guides70904 +Ref: circle71158 +Ref: arctime76646 +Ref: extension80501 +Node: Pens87184 +Ref: fillrule94550 +Ref: basealign95447 Ref: transparency98274 Ref: makepen101717 Ref: overwrite102555 @@ -9740,93 +9749,93 @@ Node: Files120055 Ref: cd121020 Ref: scroll125452 Node: Variable initializers128525 -Node: Structures131138 -Node: Operators138582 -Node: Arithmetic & logical138896 -Node: Self & prefix operators140870 -Node: User-defined operators141658 -Node: Implicit scaling142569 -Node: Functions143132 -Ref: stack overflow145885 -Node: Default arguments146449 -Node: Named arguments147188 -Node: Rest arguments149350 -Node: Mathematical functions152160 -Node: Arrays156767 -Ref: sort163817 -Ref: tridiagonal166221 -Ref: solve167449 -Node: Slices171642 -Node: Casts175532 -Node: Import177497 -Node: Static182724 -Node: LaTeX usage185618 -Node: Base modules191092 -Node: plain193592 -Node: simplex194244 -Node: math194517 -Node: interpolate197222 -Node: geometry197501 -Node: trembling198095 -Node: stats198446 -Node: patterns198706 -Node: markers198942 -Node: tree200725 -Node: binarytree200913 -Node: drawtree201502 -Node: syzygy201706 -Node: feynman201980 -Node: roundedpath202255 -Node: animation202538 -Ref: animate202955 -Node: embed204094 -Node: slide205883 -Node: MetaPost206223 -Node: unicode206939 -Node: latin1207827 -Node: babel208195 -Node: labelpath208424 -Node: labelpath3209244 -Node: annotate209555 -Node: CAD210026 -Node: graph210336 -Ref: ticks217465 -Ref: pathmarkers230744 -Ref: marker231209 -Ref: markuniform231560 -Ref: errorbars233351 -Ref: automatic scaling237407 -Node: palette248053 -Ref: images248171 -Ref: image252342 -Ref: logimage252820 -Ref: penimage253626 -Node: three254070 -Ref: PostScript3D278612 -Node: obj280304 -Node: graph3280556 -Ref: GaussianSurface285681 -Node: grid3286785 -Node: solids287525 -Node: tube288473 -Node: flowchart290708 -Node: contour295277 -Node: contour3300402 -Node: slopefield300709 -Node: ode302146 -Node: Options302406 -Ref: configuration file308251 -Ref: settings308251 -Ref: convert309452 -Node: Interactive mode312419 -Ref: history314572 -Node: GUI315877 -Node: GUI installation316380 -Node: GUI usage317510 -Node: PostScript to Asymptote318413 -Node: Help319169 -Node: Debugger320905 -Node: Credits322690 -Node: Index323622 +Node: Structures131250 +Node: Operators138694 +Node: Arithmetic & logical139008 +Node: Self & prefix operators140982 +Node: User-defined operators141770 +Node: Implicit scaling142681 +Node: Functions143244 +Ref: stack overflow145997 +Node: Default arguments146561 +Node: Named arguments147300 +Node: Rest arguments149462 +Node: Mathematical functions152272 +Node: Arrays156879 +Ref: sort163929 +Ref: tridiagonal166333 +Ref: solve167561 +Node: Slices171754 +Node: Casts175644 +Node: Import177609 +Node: Static182836 +Node: LaTeX usage185730 +Node: Base modules191468 +Node: plain193968 +Node: simplex194620 +Node: math194893 +Node: interpolate197598 +Node: geometry197877 +Node: trembling198471 +Node: stats198822 +Node: patterns199082 +Node: markers199318 +Node: tree201101 +Node: binarytree201289 +Node: drawtree201878 +Node: syzygy202082 +Node: feynman202356 +Node: roundedpath202631 +Node: animation202914 +Ref: animate203331 +Node: embed204470 +Node: slide206259 +Node: MetaPost206599 +Node: unicode207315 +Node: latin1208203 +Node: babel208571 +Node: labelpath208800 +Node: labelpath3209620 +Node: annotate209931 +Node: CAD210402 +Node: graph210712 +Ref: ticks217841 +Ref: pathmarkers231120 +Ref: marker231585 +Ref: markuniform231936 +Ref: errorbars233727 +Ref: automatic scaling237783 +Node: palette248429 +Ref: images248547 +Ref: image252718 +Ref: logimage253196 +Ref: penimage254002 +Node: three254446 +Ref: PostScript3D278988 +Node: obj280680 +Node: graph3280932 +Ref: GaussianSurface286057 +Node: grid3287161 +Node: solids287901 +Node: tube288849 +Node: flowchart291084 +Node: contour295653 +Node: contour3300778 +Node: slopefield301085 +Node: ode302522 +Node: Options302782 +Ref: configuration file308627 +Ref: settings308627 +Ref: convert309828 +Node: Interactive mode312795 +Ref: history314948 +Node: GUI316253 +Node: GUI installation316756 +Node: GUI usage317886 +Node: PostScript to Asymptote318789 +Node: Help319545 +Node: Debugger321281 +Node: Credits323066 +Node: Index323998 End Tag Table |