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)

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.

hartformule.png
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

asyprogtitel.png
De titelpagina van het boek

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

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.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

zwanen
Graancirkel (Ruben van Haaster)
zwanen
Graancirkel (Bart Dioos) ---
uk2000ee.jpg
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

inspiratieinbruin.jpg
Inspiratie in bruin (R & W Van Hirtum)

Get Foxit Reader Voor Windows gebruikers: download Foxit Reader om pdf te lezen.

  © Bijgewerkt in 2020, Wilfried Van Hirtum

Email wilfriedvanhirtum@yahoo.com

YouTube   Whitecloudingray