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 16:08, 2 June 2011

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

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: [asy] import three; currentprojection=orthographic(1,1/2,1/2);  draw(unitcube,palegrey); [/asy] Using currentprojection=perspective(1,1/2,1/2); We get a unit cube as: [asy] import three; currentprojection=perspective(1,1/2,1/2);  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.

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);

[asy] import three; draw((0,0,0)--(1,1,1),green,Arrows3); [/asy]

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 [asy] import three; unitsize(1cm); size(200); currentprojection=orthographic(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]

Other 3D Modules

Other modules in Asymptote that are for 3D are: graph3, grid3, contour3