Difference between revisions of "Autograph"
(→Examples) |
(→Examples) |
||
(One intermediate revision by the same user not shown) | |||
Line 249: | Line 249: | ||
</asy> | </asy> | ||
<asy> | <asy> | ||
− | |||
/* | /* | ||
AUTO-GRAPH V-5 alpha by PythonNut. Please do not plagerize, it's illegal :) | AUTO-GRAPH V-5 alpha by PythonNut. Please do not plagerize, it's illegal :) | ||
Customizations: feel free to edit | Customizations: feel free to edit | ||
graph function */ | graph function */ | ||
− | |||
real f(real x){ | real f(real x){ | ||
− | + | return 5*sin(x);} // type function to be graphed here | |
− | |||
− | |||
/* x maximum and minimum */ | /* x maximum and minimum */ | ||
int X_max = 10; int X_min = -10; | int X_max = 10; int X_min = -10; | ||
/* y maximum and minimum */ | /* y maximum and minimum */ | ||
int Y_max = 10; int Y_min = -10; | int Y_max = 10; int Y_min = -10; | ||
− | |||
/* toggle features */ | /* toggle features */ | ||
bool mark_lattice = true; | bool mark_lattice = true; | ||
Line 270: | Line 265: | ||
bool integral = true; | bool integral = true; | ||
bool maxima_and_minima = true; | bool maxima_and_minima = true; | ||
− | real[] Dpoints = {}; | + | bool derivative = true; real[] Dpoints = {2.1,2.2,2.3}; |
− | |||
/* other options */ | /* other options */ | ||
− | int size = 500; | + | int size = 500; real line_width = 0.75; |
− | real line_width = 0.75; | + | pen color = heavygreen; pen opacity = opacity(0.9); |
− | pen color = heavygreen; | + | real X_density = 1; real Y_density = 1; real ratio = 1; |
− | pen opacity = opacity(0.9); | + | real res = 0.00005; pen fill = palegreen+linewidth(0.75)+opacity(0.8); |
− | real X_density = 1; | + | pen aux = linewidth(0.75)+opacity(0.9); |
− | real Y_density = 1; | + | pen[] colors = {blue,red,green,pink,yellow,purple,orange}; |
− | real ratio = 1; | + | real Dres = 0.00000001; |
− | real res = 0.00005; | ||
− | pen fill = palegreen+linewidth(0.75)+opacity(0.8); | ||
− | pen aux | ||
− | pen[] colors = {blue,red,green,pink,yellow,purple | ||
− | real Dres = 0.00000001; | ||
/* The Code. Do not disturb unless you know what you are doing */ | /* The Code. Do not disturb unless you know what you are doing */ | ||
− | import math; | + | import math;import graph; |
− | import graph; | + | size(size);unitsize(size*ratio,size);Label l;l.p=fontsize(6);path s=(X_max,0)--(X_min,0); |
− | size(size); | + | pen GRAPH = opacity+color+linewidth(line_width);real temp = X_min; |
− | unitsize(size*ratio,size); | + | while (! (f(temp) <= Y_max && f(temp) >= Y_min && temp < X_max)){temp += res;} |
− | Label l; | + | if (integral){if (f(temp-res) > Y_max){ |
− | l.p=fontsize(6); | + | filldraw( (X_min,0)--(X_min,Y_max)--(temp,Y_max)--(temp,0)--cycle , fill,fill);}if (f(temp-res) < Y_min){ |
− | path s=(X_max,0)--(X_min,0); | + | filldraw( (X_min,0)--(X_min,Y_min)--(temp,Y_min)--(temp,0)--cycle , fill,fill);}}real max = temp; |
− | pen GRAPH = opacity+color+linewidth(line_width); | + | while (f(max) <= Y_max && f(max) >= Y_min && max < X_max){max += res;}real min = temp; |
− | real temp = X_min; | + | while (f(min) <= Y_max && f(min) >= Y_min && min > X_min){min -= res;} |
− | + | path graph = graph(f,min,max,n=2400);if (integral){ | |
− | + | filldraw((min,0)--graph--(max,0)--cycle,fill,fill);}draw(graph,GRAPH,Arrows);temp = max+res; | |
− | + | while (temp <= X_max){max=temp; | |
− | if ( | + | while (! (f(temp) <= Y_max && f(temp) >= Y_min) && temp < X_max){ |
− | if ( | + | temp += res;}if (integral){if (f(temp-res) > Y_max){ |
− | + | filldraw( (max,0)--(max,Y_max)--(temp,Y_max)--(temp,0)--cycle , fill,fill);} | |
− | + | if (f(temp-res) < Y_min){ | |
− | + | filldraw( (max,0)--(max,Y_min)--(temp,Y_min)--(temp,0)--cycle , fill,fill); | |
− | + | }}real max = temp; | |
− | + | while (f(max) <= Y_max && f(max) >= Y_min && max < X_max){max += res;}real min = temp; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | while (! (f(temp) <= Y_max && f(temp) >= Y_min && temp < X_max | ||
− | |||
− | |||
− | if (integral){ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | real max = temp; | ||
− | |||
− | while (f(max) <= Y_max && f(max) >= Y_min && max < X_max){ | ||
− | |||
− | |||
− | real min = temp; | ||
− | |||
while (f(min) <= Y_max && f(min) >= Y_min && min > X_min){ | while (f(min) <= Y_max && f(min) >= Y_min && min > X_min){ | ||
− | + | min -= res;}if (max <= X_max){path graph = graph(f,min,max,n=2400); | |
− | + | if (integral){filldraw((min,0)--graph--(max,0)--cycle,fill,fill);}draw(graph,GRAPH,Arrows);} | |
− | + | if (mark_solutions){dot(intersectionpoints(s,graph),green);}temp = max+res;continue;} | |
− | + | if (integral){if (f(temp-res) > Y_max){ | |
− | + | filldraw( (temp,0)--(temp,Y_max)--(X_max,Y_max)--(X_max,0)--cycle , fill,fill);} | |
− | + | if (f(temp-res) < Y_min){ | |
− | + | filldraw( (temp,0)--(temp,Y_min)--(X_max,Y_min)--(X_max,0)--cycle , fill,fill);}}temp = X_max; | |
− | + | while (f(temp) <= Y_max && f(temp) >= Y_min && temp >= X_min){temp -= res;} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | if (integral){ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | temp = X_max; | ||
− | |||
− | while (f(temp) <= Y_max && f(temp) >= Y_min && temp >= X_min){ | ||
− | |||
− | |||
if (f(X_max) <= Y_max && f(X_max) >= Y_min){ | if (f(X_max) <= Y_max && f(X_max) >= Y_min){ | ||
− | + | path graph2 = graph(f,temp,X_max,n=2400);if (integral){ | |
− | + | filldraw( (temp,0)--graph2--(X_max,0)--cycle,fill,fill );}draw(graph2,GRAPH,Arrows); | |
− | + | if (mark_solutions){dot(intersectionpoints(s,graph2),green);}} | |
− | + | if (mark_lattice){for (real temp = X_min; temp <= X_max; ++temp){ | |
− | + | if (f(temp)%1==0 && f(temp)<=Y_max && f(temp)>=Y_min){ | |
− | + | dot((temp,f(temp)),color+linewidth(line_width*4));}}}if (maxima_and_minima){ | |
− | + | real temp = X_min;real min = X_max;real max = X_min;while (temp <= X_max){ | |
− | + | if (f(temp) >= max){max=f(temp);}if (f(temp) <= min){min=f(temp);}temp+=res;} | |
− | } | + | if (max < X_max && max > X_min){draw((X_min,max)--(X_max,max),aux+blue);} |
− | + | if (min > X_min && min < X_max){draw((X_min,min)--(X_max,min),aux+blue);}} | |
− | + | if (derivative){for (int i = 0; i < Dpoints.length; ++i){real Dpoint=Dpoints[i]; | |
− | if (mark_lattice){ | + | real h(real x){real temp = -(f(Dpoint)-f(Dpoint+Dres))/Dres*x; |
− | + | temp += (f(Dpoint)-f(Dpoint+Dres))/Dres*Dpoint;temp += f(Dpoint);return temp;} | |
− | + | dot((Dpoint,f(Dpoint)),linewidth(3)+colors[i%colors.length]); | |
− | + | draw(graph(h,X_min-0.2,X_max+0.2),aux+colors[i%colors.length]); | |
− | + | draw((Dpoint,f(Dpoint))--(Dpoint,0),darkgrey+dashed);}} | |
− | |||
− | |||
− | } | ||
− | |||
− | if (maxima_and_minima){ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
clip((X_min-0.2,Y_min-0.2)--(X_min-0.2,Y_max+0.2)--(X_max+0.2,Y_max+0.2)--(X_max+0.2,Y_min-0.2)--cycle); | clip((X_min-0.2,Y_min-0.2)--(X_min-0.2,Y_max+0.2)--(X_max+0.2,Y_max+0.2)--(X_max+0.2,Y_min-0.2)--cycle); | ||
− | + | dot((0,0));picture main;xaxis("$x$",X_min,X_max,Ticks(l,X_density,(X_density/2),NoZero),Arrows); | |
− | picture main; | + | yaxis("$y$",Y_min,Y_max,Ticks(l,Y_density,(Y_density/2),NoZero),Arrows); |
− | + | if (show_grid){add(shift(X_min,Y_min)*grid(X_max-X_min,Y_max-Y_min));} | |
− | + | add(main);/* Property of "PythonNut" 2011*/ | |
− | |||
− | if (show_grid){ | ||
− | |||
− | } | ||
− | add(main); | ||
− | |||
− | /* Property of "PythonNut" 2011*/ | ||
</asy> | </asy> | ||
Latest revision as of 14:01, 2 September 2011
Autograph
Autograph is a piece of code written in Asymptote that graphs functions. The user must only set the function, and optionally
- the x and y maximums and minimums
- the color of the graph line
- the density of the ticks
- whether to show the grid or not
- wether to mark lattice points or not
- the ratio of x to y
- the width of the line
It is targeted to beginners in asymptote who don't want to learn all of it, but still want to make nice graphs.
This code is currently developed by PythonNut, a AoPS user. The changes are kept on his blog.
Examples
Some pretty graphs:
The code
The code is:
/* AUTO-GRAPH V-4 beta by PythonNut*/ /* Customizations: feel free to edit */ import math; import graph; /* x maximum and minimum */ int X_max = 10; int X_min =-10; /* y maximum and minimum */ int Y_max = 10; int Y_min = -10; /* linewidth */ real line_width = 0.75; /* graph color */ pen graph_color = heavygreen; /* special */ bool mark_lattice = false; bool show_grid = true; real X_tick_density = 1; real Y_tick_density = 1; real ratio = 1; real resolution = 0.0001; int size = 300; /* graph function */ real f(real x) { return 2x^3-6x^2+3x-1; /* type function to be graphed here */ } /* The Code. Do not disturb unless you know what you are doing */ bool ib(real t){ return (Y_min <= f(t) && f(t) <= Y_max); } size(size);unitsize(size*ratio,size);Label l;l.p=fontsize(6); xaxis("$x$",X_min,X_max,Ticks(l,X_tick_density,(X_tick_density/2),NoZero),Arrows); yaxis("$y$",Y_min,Y_max,Ticks(l,Y_tick_density,(Y_tick_density/2),NoZero),Arrows);// if (show_grid){add(shift(X_min,Y_min)*grid(X_max-X_min,Y_max-Y_min));} real t, T1, T2; for (T1 = X_min ; T1 <= X_max ; T1 += resolution){ while (! ib(T1) && T1 <= X_max){T1 += resolution;} if(T1 > X_max){break;} T2 = T1; while ( ib(T1) && T1 <= X_max){T1 += resolution;} T1 -= resolution; draw(graph(f,T2,T1,n=2400),graph_color+linewidth(line_width),Arrows); } if (mark_lattice){ for (t = X_min; t <= X_max; ++t){ if (f(t)%1==0 && ib(t)){ dot((t,f(t)),graph_color+linewidth(line_width*4)); } } } dot((0,0));
Autograph Micro
Autograph micro is a version of autograph made to fit in the AoPS classroom character limit.
[asy]int X=10,x=-10,Y=10,y=-10; real f(real x){return 11*sin(x);} size(300); Label l;l.p=fontsize(6);dot((0,0)); xaxis(x,X,Ticks(l,1.0,0.5));yaxis(y,Y,Ticks(l,1.0,0.5)); add(shift(x,y)*grid(X-x,Y-y)); draw(graph(f,x,X,n=2400),heavygreen+linewidth(1),Arrows); clip((x,y)--(x,Y)--(X,Y)--(X,y)--cycle);[/asy]
Autograph implicit
Autograph implicit Is a version of Autograph used to graph implicit functions such as The code is
[asy] /* AUTO-GRAPH implict by PythonNut*/ /* Customizations: feel free to edit */ import math; import graph; import contour; /* x maximum and minimum */ int X_max = 10; int X_min =-10; /* y maximum and minimum */ int Y_max = 10; int Y_min = -10; /* graph color */ pen graph_line = heavygreen+linewidth(0.75); /* special */ bool show_grid = true; real X_tick_density = 1; real Y_tick_density = 1; real ratio = 1; int size = 300; real value = 2.5; /* value to set to */ /* graph function */ real f(real x, real y) { return x^13+5*x^5*y^3+x*y^5+y^5; /* type function to be graphed here */ } /* The Code. Do not disturb unless you know what you are doing */ size(size);unitsize(size*ratio,size);Label l;l.p=fontsize(6); xaxis("$x$",X_min,X_max,Ticks(l,X_tick_density,(X_tick_density/2),NoZero),Arrows); yaxis("$y$",Y_min,Y_max,Ticks(l,Y_tick_density,(Y_tick_density/2),NoZero),Arrows);// if (show_grid){add(shift(X_min,Y_min)*grid(X_max-X_min,Y_max-Y_min));} draw(contour(f,(X_min,Y_min),(X_max,Y_max), new real[] {value}),graph_line);[/asy]