Difference between revisions of "Asymptote: 3D graphics"
Line 1: | Line 1: | ||
{{Asymptote}} | {{Asymptote}} | ||
− | + | '''Written by:''' [[http://www.artofproblemsolving.com/Forum/memberlist.php?mode=viewprofile&u=81377|PythonNut]] | |
==Three== | ==Three== | ||
Three is a module in Asymptote that allows the user to create three dimensional graphics. Usually all you must do is import three, | Three is a module in Asymptote that allows the user to create three dimensional graphics. Usually all you must do is import three, | ||
Line 47: | Line 47: | ||
currentprojection=perspective(1,1/2,1/2); | currentprojection=perspective(1,1/2,1/2); | ||
draw(unitcube,palegrey); | draw(unitcube,palegrey); | ||
+ | </asy> | ||
+ | ==Interactive Projection== | ||
+ | When using Asymptote on your computer (not on AoPS), you can add some code that lets you rotate/pan/zoom with the mouse. | ||
+ | <pre><nowiki> | ||
+ | import settings; | ||
+ | leftbutton=new string[] {"rotate","zoom","shift","pan"}; | ||
+ | middlebutton=new string[] {"menu"}; | ||
+ | rightbutton=new string[] {"zoom/menu","rotateX","rotateY","rotateZ"}; | ||
+ | wheelup=new string[] {"zoomin"}; | ||
+ | wheeldown=new string[] {"zoomout"}; | ||
+ | </nowiki></pre> | ||
+ | When compiling to PDF, it will allow you to rotate/pan/zoom with the mouse. | ||
+ | ==Arrows== | ||
+ | Arrows in 3D are the same as in 2D except you add a 3 to the end of the name. | ||
+ | Example. | ||
+ | <pre><nowiki> | ||
+ | import three; | ||
+ | draw((0,0,0)--(1,1,1),green,Arrows3); | ||
+ | </nowiki></pre> | ||
+ | <asy> | ||
+ | import three; | ||
+ | draw((0,0,0)--(1,1,1),green,Arrows3); | ||
</asy> | </asy> | ||
==Example== | ==Example== |
Revision as of 15:08, 2 June 2011
Written by: [[1]]
Three
Three is a module in Asymptote that allows the user to create three dimensional graphics. Usually all you must do is import three,
import three;
then change from using doubles to using triples as coordinates. Though some functions do not work when three is active. In order to fill a surface, for example, one must define a surface and draw that. instead of using filldraw. This is also described <url>http://www.artofproblemsolving.com/Forum/viewtopic.php?f=519&t=399845 here</url>.
Projection
You can use
currentprojection=orthographic(x,y,z);
To change current the view.
currentprojection=perspective(x,y,z);
Does the same thing, but is distorts the picture to imitate actual perspective.
Example:
base code:
import three; /* perspective line /* draw(unitcube,palegrey);
Using
currentprojection=orthographic(1,1/2,1/2);
We get a unit cube as:
Using
currentprojection=perspective(1,1/2,1/2);
We get a unit cube as:
Interactive Projection
When using Asymptote on your computer (not on AoPS), you can add some code that lets you rotate/pan/zoom with the mouse.
import settings; leftbutton=new string[] {"rotate","zoom","shift","pan"}; middlebutton=new string[] {"menu"}; rightbutton=new string[] {"zoom/menu","rotateX","rotateY","rotateZ"}; wheelup=new string[] {"zoomin"}; wheeldown=new string[] {"zoomout"};
When compiling to PDF, it will allow you to rotate/pan/zoom with the mouse.
Arrows
Arrows in 3D are the same as in 2D except you add a 3 to the end of the name. Example.
import three; draw((0,0,0)--(1,1,1),green,Arrows3);
Example
import three; unitsize(1cm); size(200); currentprojection=perspective(1/3,-1,1/2); draw((0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle,red); draw((0,0,0)--(0,0,1),red); draw((0,1,0)--(0,1,1),red); draw((1,1,0)--(1,1,1),red); draw((1,0,0)--(1,0,1),red); draw((0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle,red); draw((0,0,0)--(1,0,0)--(1,1,0)--cycle,red); draw((0,0,0)--(1,1,0)--(1,1,1)--cycle,blue); label("$o$",(0,0,0),NW); label("$x=1$",(0.5,0,0),S); label("$y=1$",(1,1,0.5),E); label("$z=1$",(1,0.5,0),SE); label("$c$",(0.5,0.5,0.5),N);[/asy]
Which renders to
Other 3D Modules
Other modules in Asymptote that are for 3D are: graph3, grid3, contour3