Difference between revisions of "Asymptote: Useful commands and their Output"

(See Also: next)
(13 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 
{{Asymptote}}
 
{{Asymptote}}
 +
For more complicated examples, which are often quite neat, see [http://www.artofproblemsolving.com/Forum/viewtopic.php?f=224&t=425087 this page] in the [[Art of Problem Solving]] Test Forum, which has various diagrams from contests.  Clicking on them will reveal the code used to make them, so this is an excellent resource for students looking to make more advanced diagrams.
  
For each of the following, we have put a blue dot at the origin in order to indicate relative location of the output on the coordinate plane.  In other words, assume that before each of the examples below is the command  
+
 
 +
For each of the following, we have put a blue dot at the origin in order to indicate relative location of the output on the coordinate plane.  In other words, assume that before each of the examples below is the command  
 
  <tt>dot((0,0),blue);</tt>
 
  <tt>dot((0,0),blue);</tt>
 
In addition, a comment after a line such as <tt>//math - extension</tt> indicates that the command (in this case <tt>extension</tt>) used in that line is defined in the <tt>math</tt> package, thus motivating the <tt>import math;</tt> (or other appropriate package) line at the top of the example.
 
In addition, a comment after a line such as <tt>//math - extension</tt> indicates that the command (in this case <tt>extension</tt>) used in that line is defined in the <tt>math</tt> package, thus motivating the <tt>import math;</tt> (or other appropriate package) line at the top of the example.
Line 17: Line 19:
 
  draw((0,0)--(50,0),BeginArrow);
 
  draw((0,0)--(50,0),BeginArrow);
 
  draw((0,-10)--(50,-10),MidArrow);
 
  draw((0,-10)--(50,-10),MidArrow);
 +
draw((0,-20)--(50,-20),EndArrow);
 
  draw((0,-30)--(50,-30),Arrows);
 
  draw((0,-30)--(50,-30),Arrows);
 
'''Output 2:'''
 
'''Output 2:'''
 
<asy> size(75);draw((0,0)--(50,0),BeginArrow);
 
<asy> size(75);draw((0,0)--(50,0),BeginArrow);
 
  draw((0,-10)--(50,-10),MidArrow);
 
  draw((0,-10)--(50,-10),MidArrow);
 +
draw((0,-20)--(50,-20),EndArrow);
 
  draw((0,-30)--(50,-30),Arrows);</asy>
 
  draw((0,-30)--(50,-30),Arrows);</asy>
  
Line 69: Line 73:
  
 
'''Example 7:'''
 
'''Example 7:'''
 +
<pre><nowiki>
 +
import olympiad;
 +
unitsize(50);
 +
pair A,B,C,O,I;
 +
A=origin; B=2*right; C=1.5*dir(70);
 +
O=circumcenter(A,B,C); // olympiad - circumcenter
 +
I=incenter(A,B,C); // olympiad - incenter
 +
draw(A--B--C--cycle);
 +
dot(O);
 +
dot(I);
 +
draw(circumcircle(A,B,C)); // olympiad - circumcircle
 +
draw(incircle(A,B,C)); // olympiad - incircle
 +
label("$I$",I,W);
 +
label("$O$",O,S);
 +
</nowiki></pre>
 +
 +
'''Output 7:'''
 +
<asy>
 
  import olympiad;
 
  import olympiad;
  unitsize(50);
+
  size(75);
 
  pair A,B,C,O,I;
 
  pair A,B,C,O,I;
 
  A=origin; B=2*right; C=1.5*dir(70);
 
  A=origin; B=2*right; C=1.5*dir(70);
  O=circumcenter(A,B,C); // olympiad - circumcenter
+
  O=circumcenter(A,B,C); /* olympiad - circumcenter */
  I=incenter(A,B,C); // olympiad - incenter
+
  I=incenter(A,B,C); /* olympiad - incenter */
 
  draw(A--B--C--cycle);
 
  draw(A--B--C--cycle);
 
  dot(O);
 
  dot(O);
 
  dot(I);
 
  dot(I);
  draw(circumcircle(A,B,C)); // olympiad - circumcircle
+
  draw(circumcircle(A,B,C)); /* olympiad - circumcircle */
  draw(incircle(A,B,C)); // olympiad - incircle
+
  draw(incircle(A,B,C)); /* olympiad - incircle */
 
  label("$I$",I,W);
 
  label("$I$",I,W);
 
  label("$O$",O,S);
 
  label("$O$",O,S);
 
+
</asy>
'''Output 7:'''
 
<asy>size(75);
 
pair A,B,C,O,I;
 
A=origin; B=2*right; C=1.5*dir(70);
 
O=circumcenter(A,B,C); // olympiad - circumcenter
 
I=incenter(A,B,C); // olympiad - incenter
 
draw(A--B--C--cycle);
 
dot(O);
 
dot(I);
 
draw(circumcircle(A,B,C)); // olympiad - circumcircle
 
draw(incircle(A,B,C)); // olympiad - incircle
 
label("$I$",I,W);
 
label("$O$",O,S);</asy>
 
  
 
----
 
----
Line 104: Line 113:
 
  size(50);
 
  size(50);
 
  currentprojection=orthographic(1/2,-1,1/2); // three - currentprojection, orthographic
 
  currentprojection=orthographic(1/2,-1,1/2); // three - currentprojection, orthographic
  draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle3,red); //three - cycle3
+
  draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);
 
  draw((0,0,0)--(0,0,1));
 
  draw((0,0,0)--(0,0,1));
 
  draw((0,1,0)--(0,1,1));
 
  draw((0,1,0)--(0,1,1));
 
  draw((1,1,0)--(1,1,1));
 
  draw((1,1,0)--(1,1,1));
 
  draw((1,0,0)--(1,0,1));
 
  draw((1,0,0)--(1,0,1));
  draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle3,green);
+
  draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);
 +
 
 +
---
 +
 
  
'''Output 8:'''
+
'''''Example 9:'''''
 +
import three;
 +
unitsize(1cm);
 +
size(50);
 +
currentprojection=orthographic(1/2,-1,1/2); /* three - currentprojection, orthographic */
 +
draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);
 +
draw((0,0,0)--(0,0,1));
 +
draw((0,1,0)--(0,1,1));
 +
draw((1,1,0)--(1,1,1));
 +
draw((1,0,0)--(1,0,1));
 +
draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);
 +
 
 +
 
 +
'''Output 9:'''
 
<asy> import three;
 
<asy> import three;
 
  unitsize(1cm);
 
  unitsize(1cm);
 
  size(50);
 
  size(50);
  currentprojection=orthographic(1/2,-1,1/2); // three - currentprojection, orthographic
+
  currentprojection=orthographic(1/2,-1,1/2); /* three - currentprojection, orthographic */
  draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle3,red); //three - cycle3
+
  draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);
 
  draw((0,0,0)--(0,0,1));
 
  draw((0,0,0)--(0,0,1));
 
  draw((0,1,0)--(0,1,1));
 
  draw((0,1,0)--(0,1,1));
 
  draw((1,1,0)--(1,1,1));
 
  draw((1,1,0)--(1,1,1));
 
  draw((1,0,0)--(1,0,1));
 
  draw((1,0,0)--(1,0,1));
  draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle3,green);</asy>
+
  draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);</asy>
 +
 
 +
---
 +
 
 +
'''Example 10, buildcycle:'''
 +
<code>
 +
fill(buildcycle(curveI,reverse(curveIII),curveII),yellow);
 +
</code>
 +
 
 +
'''Output 10, buildcycle:'''
 +
<asy>
 +
unitsize(1cm);
 +
pair A1=(2,5),A2=(10,1);
 +
pair B1=(1,1),B2=(10,5);
 +
pair C1=(1,2),C2=(10,3.5);
 +
path curveI = A1 .. controls (6,5) .. A2;
 +
path curveII = B1 .. controls (3,4) .. B2;
 +
path curveIII = C1 .. controls (3,3) and (7,0) .. (9,2) ..controls C2 .. C2;
 +
fill(buildcycle(curveI,reverse(curveIII),curveII),yellow);
 +
draw(curveI, red);
 +
draw(curveII, blue);
 +
draw(curveIII, green);
 +
pair ip_1 = intersectionpoint(curveI, curveII);
 +
pair ip_2 = intersectionpoint(curveII, curveIII);
 +
pair ip_3 = intersectionpoint(curveI, curveIII);
 +
label("$A_1$",A1,1.5W,red);
 +
label("$A_2$",A2,1SE,red);
 +
label("$B_1$",B1,1.5SSW,heavyblue);
 +
label("$B_2$",B2,1.12E,heavyblue);
 +
label("$C_1$",C1,1.5W,heavygreen);
 +
label("$C_2$",C2,1.25E,heavygreen);
 +
dot(ip_1^^ip_2^^ip_3);
 +
label("$S_1$",ip_1, 1.5*NNE);
 +
label("$S_2$",ip_2, 1.5*SSE);
 +
label("$S_3$",ip_3, 1.85*dir(-93));
 +
dot(A1^^A2, mediumred);
 +
dot(B1^^B2, mediumblue);
 +
dot(C1^^C2, mediumgreen);
 +
</asy>
 +
 
 +
 
 +
'''Examples in Forum'''
 +
 
 +
Clicking on the images the the forum or on images here in the previous examples will show you as to-copy-and-paste the Asymptote source. (For this you have to be registered at artofproblemsolving.com.)
 +
 
 +
[http://www.artofproblemsolving.com/Forum/viewtopic.php?p=1089805#1089805 Triangles, lines, tick marks, angle marks]
 +
 
  
 
== See Also ==
 
== See Also ==

Revision as of 16:48, 2 April 2014

Asymptote (Vector Graphics Language)
Getting Started - Basics - Drawing - Labeling - Filling - Useful functions - Examples - Macros and Packages

Help - Reference - Advanced Asymptote - 3D Graphics - CSE5 Package - How to

For more complicated examples, which are often quite neat, see this page in the Art of Problem Solving Test Forum, which has various diagrams from contests. Clicking on them will reveal the code used to make them, so this is an excellent resource for students looking to make more advanced diagrams.


For each of the following, we have put a blue dot at the origin in order to indicate relative location of the output on the coordinate plane. In other words, assume that before each of the examples below is the command

dot((0,0),blue);

In addition, a comment after a line such as //math - extension indicates that the command (in this case extension) used in that line is defined in the math package, thus motivating the import math; (or other appropriate package) line at the top of the example.


Example 1:

dot((20,0));

Output 1: [asy]dot((20,0));[/asy]


Example 2:

draw((0,0)--(50,0),BeginArrow);
draw((0,-10)--(50,-10),MidArrow);
draw((0,-20)--(50,-20),EndArrow);
draw((0,-30)--(50,-30),Arrows);

Output 2: [asy] size(75);draw((0,0)--(50,0),BeginArrow);  draw((0,-10)--(50,-10),MidArrow);  draw((0,-20)--(50,-20),EndArrow);  draw((0,-30)--(50,-30),Arrows);[/asy]


Example 3:

draw((0,0)--(50,0));
arrow((30,0),dir(180),green);

Output 3: Figure4.gif


Example 4:

import math;
pair A,B,C,D,E;
A=(0,0); C=(50,0); B=(10,10); D=(40,20);
E=extension(A,B,C,D);  // math - extension
// extension(A,B,C,D) returns the intersection of lines AB and CD
draw(A--B); draw(C--D);
draw(B--E--D,orange);

Output 4: Figure5.gif


Example 5:

import graph;
draw(Circle((0,0),20)); // graph - Circle

Output 5: Figure6.gif


Example 6:

path p=(0,0)..(20,15)..(40,-5)..(50,0);
draw(p);
draw(rotate(90)*p,green);
draw(rotate(180,(-5,0))*p,orange);
draw(shift((5,20))*p,magenta);
draw(shift((0,-25))*yscale(1.4)*p,red);

Output 6: Figure7.gif


Example 7:

import olympiad;
unitsize(50);
pair A,B,C,O,I;
A=origin; B=2*right; C=1.5*dir(70);
O=circumcenter(A,B,C); // olympiad - circumcenter
I=incenter(A,B,C); // olympiad - incenter
draw(A--B--C--cycle);
dot(O);
dot(I);
draw(circumcircle(A,B,C)); // olympiad - circumcircle
draw(incircle(A,B,C)); // olympiad - incircle
label("$I$",I,W);
label("$O$",O,S);

Output 7: [asy]  import olympiad;  size(75);  pair A,B,C,O,I;  A=origin; B=2*right; C=1.5*dir(70);  O=circumcenter(A,B,C); /* olympiad - circumcenter */  I=incenter(A,B,C); /* olympiad - incenter */  draw(A--B--C--cycle);  dot(O);  dot(I);  draw(circumcircle(A,B,C)); /* olympiad - circumcircle */  draw(incircle(A,B,C)); /* olympiad - incircle */  label("$I$",I,W);  label("$O$",O,S); [/asy]


Example 8:

import three;
unitsize(1cm);
size(50);
currentprojection=orthographic(1/2,-1,1/2); // three - currentprojection, orthographic
draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);
draw((0,0,0)--(0,0,1));
draw((0,1,0)--(0,1,1));
draw((1,1,0)--(1,1,1));
draw((1,0,0)--(1,0,1));
draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);

---


Example 9:

import three;
unitsize(1cm);
size(50);
currentprojection=orthographic(1/2,-1,1/2); /* three - currentprojection, orthographic */
draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);
draw((0,0,0)--(0,0,1));
draw((0,1,0)--(0,1,1));
draw((1,1,0)--(1,1,1));
draw((1,0,0)--(1,0,1));
draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);


Output 9: [asy] import three;  unitsize(1cm);  size(50);  currentprojection=orthographic(1/2,-1,1/2); /* three - currentprojection, orthographic */  draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red);  draw((0,0,0)--(0,0,1));  draw((0,1,0)--(0,1,1));  draw((1,1,0)--(1,1,1));  draw((1,0,0)--(1,0,1));  draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,green);[/asy]

---

Example 10, buildcycle: fill(buildcycle(curveI,reverse(curveIII),curveII),yellow);

Output 10, buildcycle: [asy] unitsize(1cm); pair A1=(2,5),A2=(10,1); pair B1=(1,1),B2=(10,5); pair C1=(1,2),C2=(10,3.5); path curveI = A1 .. controls (6,5) .. A2; path curveII = B1 .. controls (3,4) .. B2; path curveIII = C1 .. controls (3,3) and (7,0) .. (9,2) ..controls C2 .. C2; fill(buildcycle(curveI,reverse(curveIII),curveII),yellow); draw(curveI, red); draw(curveII, blue); draw(curveIII, green); pair ip_1 = intersectionpoint(curveI, curveII); pair ip_2 = intersectionpoint(curveII, curveIII); pair ip_3 = intersectionpoint(curveI, curveIII); label("$A_1$",A1,1.5W,red); label("$A_2$",A2,1SE,red); label("$B_1$",B1,1.5SSW,heavyblue); label("$B_2$",B2,1.12E,heavyblue); label("$C_1$",C1,1.5W,heavygreen); label("$C_2$",C2,1.25E,heavygreen); dot(ip_1^^ip_2^^ip_3); label("$S_1$",ip_1, 1.5*NNE); label("$S_2$",ip_2, 1.5*SSE); label("$S_3$",ip_3, 1.85*dir(-93)); dot(A1^^A2, mediumred); dot(B1^^B2, mediumblue); dot(C1^^C2, mediumgreen); [/asy]


Examples in Forum

Clicking on the images the the forum or on images here in the previous examples will show you as to-copy-and-paste the Asymptote source. (For this you have to be registered at artofproblemsolving.com.)

Triangles, lines, tick marks, angle marks


See Also

Many more Asymptote examples

Next: Macros and Packages