Gasket

to msgn :num
    output * -1 :num
end
         
to filltriangle :x :y :size
    penup
    setxy sentence :x :y
    pendown
    repeat 3 [forward :size right 120]
    penup
    right 30
    forward * :size 0.578
    pendown
    if :size >= 1 then fill else dot pos
end
         
to SierpinskiGasket :x :y :d :size
    if :d = 0 [stop]
         
    (local "new.size "add.x "add.y)
    make "new.size (/ :size 2)
    make "add.x (* :size 0.75)
    make "add.y (* :size 0.433)
    make "d (- :d 1)
         
    SierpinskiGasket :x :y :d :new.size
    SierpinskiGasket (+ :new.size :x) :y :d :new.size
    SierpinskiGasket (+ / :new.size 2 :x) (+ :add.y :y) :d :new.size
    setheading 210
    filltriangle (+ :add.x :x) (+ :add.y :y) :new.size
end
         
to gasketDraw :depth [:plane 300] 1
    (local
    "po.x "po.y
    "current.pc "current.bgc
    )
         
    make "po.x msgn / :plane 2
    make "po.y msgn * :plane 0.433
    make "current.pc pencolor
    make "current.bgc background
    penup
    setheading 30
    filltriangle :po.x :po.y :plane
    setpc :current.bgc
    SierpinskiGasket :po.x :po.y :depth :plane
    setpc :current.pc
end
(gasketDraw 1 150)
(gasketDraw 2 150)
(gasketDraw 5 150)
(gasketDraw 7 150)

 シェルピンスキのギャスケット図形です。
再帰レベルが5くらいだと、矢じり図形によく似ています。
しかし、更に再帰が深くなると図形は、消えて無くなってしまいます。
それは、ギャスケットが図形を刳り貫いて描かれている図形だからです。
※ギャスケットとは、エンジンなどのシリンダー部品やパイプの繋ぎ目などの、ガス漏れや液漏れ防止用の穴が開いたパッキング(詰め物の一種)部品の事です。
穴を空けて残った領域に、更に穴を空けて行く事を繰り返せば、最終的には穴だけの図形になりますね。(:-P)

Carpet

to carpet :x :y :d :size
    if :d = 0 [stop]
         
    (local
    "new.size "add.size
    "x.new "y.new
    "x.add "y.add
    )
         
    make "new.size (/ :size 3)
    make "add.size (* :new.size 2)
    make "x.new (+ :x :new.size)
    make "y.new (+ :y :new.size)
    make "x.add (+ :x :add.size)
    make "y.add (+ :y :add.size)
    make "d (- :d 1)
         
    carpet :x :y :d :new.size
    carpet :x.new :y :d :new.size
    carpet :x.add :y :d :new.size
    carpet :x :y.new :d :new.size
    carpet :x.add :y.new :d :new.size
    carpet :x :y.add :d :new.size
    carpet :x.new :y.add :d :new.size
    carpet :x.add :y.add :d :new.size
         
    fillSquare :x.new :y.new :new.size
end
         
to carpetDraw :depth [:plane 300] 1
    (local
    "po.x "po.y
    "current.pc "current.bgc
    )
         
    make "current.pc pencolor
    make "current.bgc background
    make "po.x msgn / :plane 2
    make "po.y :po.x
    penup
    setxy sentence :po.x :po.y
    pendown
    (stamprect :plane :plane "true)
    setpc :current.bgc
    carpet :po.x :po.y :depth :plane
    setpc :current.pc
end
(carpetDraw 1 150)
(carpetDraw 3 150)
(carpetDraw 5 150)

 今度は、カーペットです。
しかし、穴の開いたカーペットって実用的ではありませんね。B^)
考え方は、ギャスケット図形と一緒です。これも、最終的には穴だけの図形になってしまいます。