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)
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 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
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.
geanyconfigwindows.zip
Deze bestanden uitpakken
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)'.
Errata en geschiedenis van de verschillende versies
//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);
//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);
}
//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);
//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);
//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());
Je kunt deze staafdiagrammen echter beter maken met behulp van de programmeertaal R. Je vindt hier een voorbeeld.
//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));
© Bijgewerkt in 2020, Wilfried Van Hirtum
wilfriedvanhirtum@yahoo.com