Asymptote

The most exciting phrase to hear in science,
the one that heralds new discoveries,
is not ``Eureka!'' (I found it!)
but ``That's funny...''

— Isaac Asimov (1920 - 1992)

Sorry, your browser doesn't support Java(tm).
hartformule.png

Veel mensen vinden programmeren een leuke bezigheid, omdat het gereedschap betreft dat de nieuwsgierigheid, de creativiteit en het doorzettingsvermogen voortdurend prikkelt. Bovendien beloont de computer op de een of andere manier altijd jouw inspanningen. Je krijgt precies wat je voor ogen had, of er verschijnt een onverwacht resultaat of een foutmelding, de start voor een nieuwe uitdaging.

Asymptote is in de eerste plaats gericht op het produceren van vectortekeningen voorzien van LaTeX-typografie, dus van professionele kwaliteit. Een vectortekening bestaat uit lijnen en kleuren, maar tekenen is veel meer dan zomaar lijnen trekken. Een complexe tekening ontleden in patronen, en deze vervolgens zo elegant mogelijk beschrijven, dat is programmeren.

Asymptote is een beschrijvende programmeertaal, zodat je complexe taken kunt verwoorden met eenvoudig leesbare code. Het ontwerpen van figuren vraagt dus een minimum aan inspanning, en geeft een maximum aan resultaat. Daarom belooft deze programmeertaal dus heel wat `fun'.

Het staat je vrij deze cursussen te downloaden. Als je deze cursus gebruikt, ken ik ook graag jouw reactie, dus jouw opmerkingen, foutmeldingen, ... zijn altijd welkom!

Veel succes!

Wilfried Van Hirtum

Titelpagina

Pdf Het boek in A4-formaat

Pdf Download asymptote

Geany configuratiebestanden voor Ubuntu geanyconfiglinux.zip
Deze bestanden uitpakken naar /home/username/.config/geany, om de editor Geany klaar te maken om te programmeren met Asymptote.
De richtlijnen staan in het boek.

Geany configuratiebestanden voor Windows geanyconfigwindows.zip
Deze bestanden uitpakken naar c:/Gebruikers/username/AppData/Roaming/ Geany (Windows Vista en Windows 7) of naar c:/Documents And Settings/username/Application Data/Geany, om de editor Geany klaar te maken om te programmeren met Asymptote.
De richtlijnen staan in het boek.
Let op gebruikers van 64-bit-computers: alle voorkomens van 'program files' vervangen door 'program files (x86)'.

asyerrata.txt Errata en geschiedenis van de verschillende versies

Voorbeelden in Asymptote

Onderlegger

Op de jaarlijkse pannenkoekendag van de Chiro werden onderleggers op de tafels gebruikt met het volgende fascinerende patroon. Het leek me een leuke oefening om deze onderlegger te programmeren met behulp van Asymptote.

onderlegger

//onderlegger.asy
int aantalkolommen=9, aantalrijen=5;
size(aantalkolommen*cm);
picture vogel, witteraaf;
pen pvogel= white, poog=white, pwitteraaf=cyan;
pen pachtergrond=rgb( 6/16, 9/16, 9/16);
pair correctie=(1,1);
pair LO=(0,0)-correctie, RB=(aantalkolommen, aantalrijen)+correctie;
path achtergrond=box(LO, RB);
filldraw(achtergrond, pachtergrond);
pair A=N, B=N+E, C=E, D=0, AB=0.5*(A+B), M=0.5*(A+C);
path krul1, krul2, krul3, krul4;
krul1=A{S}..{N}AB..{S}B;
real hoek=-90;
krul2=rotate(hoek, M)*krul1;
krul3=rotate(hoek, M)*krul2;
krul4=rotate(hoek, M)*krul3;
path omtrek=krul1..krul2..krul3..krul4..cycle;
path oog=circle(0.5*(AB+B)+0.125*N, 0.075);
draw(vogel, omtrek, pvogel);
draw(vogel, oog, pvogel);
filldraw(witteraaf, omtrek, pwitteraaf);
filldraw(witteraaf, oog, poog);
transform rechts=shift(E);
transform boven=shift(N);
for (int rij=0; rij<aantalrijen; ++rij){
	for (int kolom=0; kolom<aantalkolommen; ++kolom){
		add(rechts^kolom*boven^rij*vogel);
	}
}
srand(seconds());
int x=rand()%aantalkolommen, y=rand()%aantalrijen;
add(rechts^x*boven^y*witteraaf);

onderlegger.asy onderlegger.asy

Radialenboog

radialenboog

radialenboog.pdf radialenboog.pdf

radialenboog.asy radialenboog.asy

Slinger


slingermetvierkanten

//slingermetvierkanten.asy
size(10cm);

pair LO=(0,0);
pair RB=(3,3);
path vierkant=scale(5)*box(LO,RB);

picture doosje;
filldraw(doosje, vierkant, lightolive);

// add(doosje);

for (int i=0; i<36*3; ++i){
  add (shift(i*W)*rotate(10*i)*doosje);
}
slingermetvierkanten.asy slingermetvierkanten.asy

Sangaku


sangaku2008oktober

//sangaku.asy
size(20cm);

pair A=(0,0);
pair B=(3,0);
pair C=(2,1);
pair D, E, F, G, H, I, J, K;

G=C+(C-A)*N;
F=G+(A-C);
H=C+(B-C)*N;
I=H+ (B-C);
K=H+(H-G)*N;
J=K+(G-H);
D=A+(B-A)*S;
E=D+(B-A);

picture sangaku;

path vierkantac=A--C--G--F--cycle;; 
path vierkantbc=C--B--I--H--cycle;; 
path vierkantgh=G--H--K--J--cycle; 
path vierkantab=B--A--D--E--cycle; 

path driehoekae=A--B--E--cycle;
path driehoekgh=G--H--K--cycle;

pen p1=orange;
pen p2=cyan;

filldraw (sangaku, vierkantac, p1);
filldraw (sangaku, vierkantbc, p1);
draw (sangaku, vierkantgh);
draw (sangaku, vierkantab);

filldraw (sangaku, driehoekae, p2);
filldraw (sangaku, driehoekgh, p2);

add(sangaku);
add(shift(-12,6)*rotate(-30)*scale(2)*sangaku);

pair positie=(2, 12);
label("\includegraphics[width=5cm]{kanjisangaku}", positie);
sangaku2008oktober.asy sangaku.asy

Graancirkels


graangrappig
Graancirkel (Ruben van Haaster)


graangrappig graangrappig
Graancirkel (Bart Dioos) --- 2000 Chibolton England (Foto: Lucy Pringle)

Hart


hartmetpijl

//hartmetpijl.asy
size(5cm);
picture fig;
draw(fig, (0,0)--(2.5,2.5), gray+2);
filldraw(fig, (0,1)..(1,2)..(2,0)..(1,-2)..(0,-3)
   ..(0,-3)..(-1,-2)..(-2,0)..(-1,2)..(0,1)..cycle,pink,red+3);
draw(fig, (-3,-3)--(0,0), gray+2);
add(fig);
hartmetpijl.asy hartmetpijl.asy

Huisje

huisjes

//voorbeeldhuisjes.asy
size(12cm);
real breedte=5;
transform t=shift(breedte,0);
pen zeegroen=rgb(.70,.93,.27);

picture huis(real hoogte=3, pen pdeur=gray+2){
    picture figuur;
	real dakhoogte=hoogte*1.9;
	real deurbreedte=1;
	real deurhoogte=2;
	real deurbegin=breedte*.2;
	pair LO=(0,0);
	pair LB=(0,hoogte);
	pair RB=(breedte,hoogte);
	pair deurLO=(deurbegin,0);
	pair deurRB=(deurbegin+deurbreedte,deurhoogte);
	pair dakpunt=(breedte/2,dakhoogte);
	path kader=box(LO,RB);
	path deur=box(deurLO,deurRB);
	path driehoek=LB--dakpunt--RB;
	draw (figuur, kader);
	filldraw (figuur, deur, pdeur);
	draw (figuur, driehoek);
    return figuur;
}
add(huis(4));
add(t*huis(blue));
add(t^2*huis(3.5));
add(t^3*huis(5,cyan));
add(t^4*huis(2.5,zeegroen));
add(t^6*huis());
huisjes.asy huisjes.asy

Staafdiagram


staafdiagram1


staafdiagram2

staafdiagram.asy staafdiagram.asy

Je kunt deze staafdiagrammen echter beter maken met behulp van de programmeertaal R. Je vindt hier een voorbeeld.

Tijdreeks


tijdreeks

tijdreeks.asy tijdreeks.asy

Webgrafiek

webgrafiek

//webgrafiek.asy    
import graph;
real bissectrice(real x){
   return x;
}
picture webgrafiek(real aa=2, real x0=0.2, int nn=1){
   picture pic;
   real f(real x) {
      return aa*x*(1-x);
   }
   real maximumxy=1;
   label (pic,"$a$="+(string)aa, (0, 1), E );
   label (pic,"$x_0=$"+(string)x0, (0, 1.1), E );
   draw(pic, graph(bissectrice, 0, maximumxy));
   draw(pic, graph(f, 0, maximumxy));
   xaxis(pic, xmin=0, xmax=maximumxy, RightTicks);
   yaxis(pic, ymin=0, ymax=maximumxy, LeftTicks);
   real x=x0;
   real y=f(x);   
   draw (pic, (x,0)--(x,y), Arrow);   //beginnen met een pijl
   draw (pic, (x,y)--(y,y));
   for (int i=0; i<nn; ++i){
      y=f(x);
      write (y);
      draw (pic, (x,x)--(x,y)--(y,y));
      x=y;  
   }
   return pic;
}
size(6cm);
add (webgrafiek(aa=2.75, x0=0.2, nn=50));

webgrafiek.asy webgrafiek.asy

Stelsels

stelselcontainers

stelselcontainers.asy stelselcontainers.asy

K/kunst

Inspiratie in bruin

Inspiratie in bruin Inspiratie in bruin (R & W Van Hirtum)





Get Foxit Reader Download Foxit Reader
Bijgewerkt op woensdag 31 oktober 2012
wilfriedvanhirtum aaattt yahoo dddooottt com