未だに使い方がよくわかっていないのと、プログラミングの素養が全くないので
こんな図を書くのにも数時間かかってしまいました。
size(4cm);
defaultpen(fontsize(12pt));
int n=3;
pair[][] a = new pair[n][n];
path p=(-0.5,0)--(0.5,0);
// 三角形の頂点
a[0][0]=(3,7);
a[1][0]=(0,0);
a[2][0]=(8,3);
// 三角形の線分の中点
for(int i=1; i<n; ++i){
for(int j=0; j<n; ++j){
a[j%n][i]=(a[(j+1)%n][i-1]+a[(j+2)%n][i-1])/2;
}
}
// 分割された三角形の辺の描画
for(int j=0; j<n; ++j){
draw(a[j%n][0]--a[(j+2)%n][1],MidArrow(SimpleHead,3.5,angle=25));
draw(a[j%n][1]--a[(j+2)%n][0],MidArrow(SimpleHead,3.5,angle=25));
draw(a[j%n][1]--a[(j+2)%n][1]);
}
// 中央の三角形の矢印
for(int j=0; j<n; ++j){
draw(shift(a[j%n][2]+rotate(90)*(unit(a[(j+1)%n][1]-a[(j+2)%n][1])/3))*rotate(degrees(a[(j+1)%n][1]-a[(j+2)%n][1]))*p,Arrow(SimpleHead,3.5,angle=25));
draw(shift(a[j%n][2]+rotate(90)*(unit(a[(j+2)%n][1]-a[(j+1)%n][1])/3))*rotate(degrees(a[(j+2)%n][1]-a[(j+1)%n][1]))*p,Arrow(SimpleHead,3.5,angle=25));
}
label("$a$",a[0][0],N);
label("$b$",a[1][0],SW);
label("$c$",a[2][0],E);
label("$a^\prime$",a[0][1],0.1SE);
label("$b^\prime$",a[1][1],NE);
label("$c^\prime$",a[2][1],WNW);