Pavage de poissons volants à la Escher
Auteur ou autrice : Marc van Dongen.
Mise en ligne le 15 octobre 2025
Ce travail est une réinterprétation des travaux ve M. C. Escher avec MetaPost. Les sources originales sont disponibles ici. Elles ont aussi été présentées sur le site Syracuse.
Code
% Freely adapted from Escher's drawing 73
% From: Doris Schattschneider
% M.C. Escher
% Visions of Symmetry
% W.H. Freeman and Company
% New York
% ISBN: 0-7167-2126-0
mpgraph:=1; input mp-tool.mpii;
prologues:=2;
beginfig(1);
pickup pencircle scaled 1;
pair p[], xshift, yshift, origin, offset;
path line[], fish, drawing;
color WHITE, GREY, C[];
WHITE = (1,1,1);
GREY = 0.85(1.0,1.0,1.0);
width = 279.4mm;
height = 215.9mm;
s := 0.055;
p1 = (4905,9000-2925);
p2 = (1215,9000-4890);
p3 = (4890,9000-8985);
p4 = (4770,9000-4155);
p5 = (4380,9000-5130);
p6 = (3840,9000-5040);
p7 = (2940,9000-4590);
p8 = (2025,9000-4515);
p9 = (1935,9000-5295);
p10 = (2445,9000-5925);
p11 = (2835,9000-6780);
p12 = (3225,9000-7425);
p13 = (2160,9000-8115);
p14 = (1455,9000-9240);
p15 = (3225,9000-9750);
p16 = (3210,9000-9735);
line1 = (p1..p4..p5) shifted -p1;
line2 = (p5..p6..p7..p8..p2) shifted -p1;
line3 = (p2..p9..p10..p11..p12) shifted -p1;
line4 = (p12..p13..p14) shifted -p1;
line5 = (p14..p15..p3) shifted -p1;
line6 = (p5..p4..p1) shifted -p1;
line7 = (p2..p8..p7..p6..p5) shifted -p1;
line8 = (p12..p11..p10..p9..p2) shifted -p1;
line9 = (p14..p13..p12) shifted -p1;
line10 = (p3 ..p15..p14) shifted -p1;
fish = line1--line2--line3--line4--line5--
line7 shifted (p3 - p2)--
line6 shifted (p3 - p2)--
line10 shifted (p1 - p2)--
line9 shifted (p1 - p2)--
line8 shifted (p1 - p2)--cycle;
p17 = (2880,9000-9750);
p18 = (2370,9000-9720);
p19 = (2055,9000-9585);
p20 = (1605,9000-9360);
p22 = (2355,9000-9540);
p23 = (2700,9000-9490);
p24 = (2820,9000-9540);
p25 = (2910,9000-9225);
p26 = (3075,9000-8880);
p27 = (3300,9000-8640);
p28 = (3420,9000-8400);
p29 = (3420,9000-8175);
p30 = (3375,9000-8025);
p31 = (3450,9000-8340);
p32 = (3420,9000-8820);
p33 = (3300,9000-9225);
p34 = (3000,9000-9645);
p35 = (1935,9000-9270);
p36 = (2385,9000-9225);
p37 = (2775,9000-9060);
p38 = (3030,9000-8895);
p39 = (3000,9000-9105);
p40 = (2865,9000-9300);
p41 = (2820,9000-9585);
p42 = (2820,9000-9570);
p43 = (3885,9000-5205);
p44 = (4005,9000-5565);
p45 = (3990,9000-5880);
p46 = (3045,9000-4725);
p47 = (3405,9000-5580);
p48 = (3555,9000-6270);
p49 = (3795,9000-7035);
p50 = (2115,9000-4605);
p51 = (2595,9000-5190);
p52 = (3015,9000-6015);
p53 = (3300,9000-6720);
p54 = (3510,9000-7230);
p55 = (4185,9000-5490);
p56 = (3855,9000-6360);
p57 = (3765,9000-7320);
p58 = (3825,9000-7620);
p59 = (4200,9000-7670);
p60 = (4455,9000-7670);
p61 = (4770,9000-7750);
p62 = (5040,9000-7890);
p63 = (5040,9000-7605);
p64 = (4080,9000-7350);
p65 = (4170,9000-6705);
p66 = (4350,9000-6120);
p67 = (4665,9000-5505);
p68 = (5130,9000-4725);
p69 = (5625,9000-3660);
p70 = (4440,9000-7320);
p71 = (4515,9000-6825);
p72 = (4875,9000-6060);
p73 = (5430,9000-5220);
p74 = (6120,9000-4320);
p75 = (4740,9000-7605);
p76 = (4845,9000-7005);
p77 = (5205,9000-6240);
p78 = (5850,9000-5460);
p79 = (6405,9000-5040);
p80 = (6945,9000-7935);
p81 = (7215,9000-8100);
p82 = (7440,9000-8340);
p83 = (7065,9000-8595);
p84 = (6705,9000-8650);
p85 = (7890,9000-8085);
p86 = (8355,9000-7905);
p87 = (7800,9000-8445);
p88 = (8235,9000-8430);
p89 = (7575,9000-8835);
p90 = (8055,9000-8880);
p91 = (3210,9000-7680);
p92 = (3285,9000-7650);
p93 = (3375,9000-7635);
p94 = (3540,9000-7710);
p95 = (3825,9000-7995);
p96 = (3990,9000-8370);
p97 = (3990,9000-8790);
p98 = (3885,9000-9150);
p99 = (3765,9000-9345);
p100 = (2775,9000-8325);
line11 = (p17..p18..p19..p20..p14) shifted -p1;
line12 = (p19..p22..p23) shifted -p1;
line13 = (p17..p24..p25..p26..p27..p28..p29..p30) shifted -p1;
line14 = (p30..p31..p32..p33..p34..p17) shifted -p1;
line15 = (p14..p35..p36..p37..p38--
p38..p25..p24..p17--
p17..p18..p19..p20..p14--
cycle) shifted -p1;
line16 = (p43..p44..p45) shifted -p1;
line17 = (p46..p47..p48..p49) shifted -p1;
line18 = (p50..p51..p52..p53..p54) shifted -p1;
line19 = (p1..p4..p5..p55..p45..p56..p49..p57..p58) shifted -p1;
line20 = (p12..(p54-(0,110))..p57) shifted -p1;
line21 = (p58..p59..p60..p61..p62) shifted - p1;
line22 = (p62..p63..p14+p1 - p2) shifted -p1;
line23 = (p59..p64..p65..p66..p67..p68..p69) shifted -p1;
line24 = (p60..p70..p71..p72..p73..p74) shifted -p1;
line25 = (p61..p75..p76..p77..p78..p79) shifted -p1;
line26 = (p80..p81..p82) shifted -p1;
line27 = (p82..p83..p84) shifted -p1;
line28 = (p81..p85..p86) shifted -p1;
line29 = (p82..p87..p88) shifted -p1;
line30 = (p83..p89..p90) shifted -p1;
line31 = (p91..p92..p93..p94..p95..p96..p97..p98..p99) shifted -p1;
line32 = (p100+(300,0)..
p100+(0,-300)..
p100-(300,0)..
p100+(300,0)--
cycle) shifted -p1;
line33 = (p100+200*(0.5,0.87)--
p100--
p100+(200,0)..
p100+(0,-200)..
p100-(200,0)..
p100+200*(0.5,0.87)--
cycle) shifted -p1;
origin = (10cm,10cm);
xshift = (p1 + p3 - 2p2) scaled s;
yshift = (p1 - p2) scaled s;
C[1] = WHITE;
C[2] = GREY;
c := 1;
xmin = -2;
xmax = 2;
ymin = -2;
ymax = 5;
for y=ymin upto ymax:
for x=xmin upto xmax:
offset := origin + x*xshift + y*yshift;
fill fish scaled s shifted offset withcolor C[c];
fill line15 scaled s shifted offset withcolor C[3-c];
fill line33 scaled s shifted offset withcolor C[3-c];
endfor;
c := 3 - c;
endfor;
c := 1;
pickup pencircle scaled 2pt;
for y=ymin upto ymax:
for x=xmin upto xmax:
offset := origin + x*xshift + y*yshift;
draw line11 scaled s shifted offset withcolor C[c];
draw line12 scaled s shifted offset withcolor C[c];
for i=13 upto 14:
draw line[i] scaled s shifted offset withcolor C[3-c];
endfor;
for i=16 upto 32:
draw line[i] scaled s shifted offset withcolor C[3-c];
endfor;
endfor;
c := 3 - c;
endfor;
%
pickup pencircle scaled 1;
draw(0,0)--(width,0)--(width,height)--(0,height)--cycle withcolor (0,0,0);
drawing = unitsquare xscaled width yscaled height;
clip currentpicture to drawing;
draw drawing;
endfig;
end
Mots clés : pavagepoissonEscher
Cet exemple fait partie de la collection d’exemples Pavages à la Escher.