Public Class Form1 Private B1 As Brush '前面の色ブラシ Private B2 As Brush '上面の色ブラシ  Private B3 As Brush '側面の色ブラシ Private Function IX(X As Double) As Integer IX = 100 + X + 0.5 End Function Private Function IY(Y As Double) As Integer IY = 200 - Y + 0.5 End Function Private Sub drawCell(g As Graphics, XX As Double, YY As Double, ZZ As Double, W As Double) Dim X As Double, Y As Double, DL As Double, IW As Integer, IH As Integer Dim X0 As Double, X1 As Double, X2 As Double, Y2 As Double, Y3 As Double Dim P As Point = New Point(4) X = XX + YY : Y = ZZ + XX : DL = W / 3 : IW = W + 0.5 : IH = DL + 0.5 X0 = X : X1 = X + DL : X2 = X + W : Y2 = Y + W : Y3 = Y2 + DL g.FillRectangle(B1, IX(X0), IY(Y2), IW, IW) 'g.FillRectangle(B2, IX(X1), IY(Y3), IW, IH) 'g.FillRectangle(B3, IX(X2), IY(Y2), IH, IW - IH) Dim P1 As Point() = { _ New Point(IX(X0), IY(Y2)), New Point(IX(X1 + DL), IY(Y3)), _ New Point(IX(X2 + DL), IY(Y3)), New Point(IX(X2), IY(Y2))} Dim P2 As Point() = { New Point(IX(X2), IY(Y2)), New Point(IX(X2 + DL), IY(Y3)), _ New Point(IX(X2 + DL), IY(Y + DL)), New Point(IX(X2), IY(Y))} g.FillPolygon(B2, P1) g.FillPolygon(B3, P2) End Sub Private Sub face1(g As Graphics, X As Double, Y As Double, Z As Double, L As Double) Dim ZZ As Double, YY As Double = Y For j = 1 To 3 ZZ = Z For k = 1 To 3 If (j <> 2 Or k <> 2) Then Menger(g, X, YY, ZZ, L) ZZ = ZZ + L Next YY = YY + L Next End Sub Private Sub face2(g As Graphics, X As Double, Y As Double, Z As Double, L As Double) Dim ZZ As Double, YY As Double = Y For j = 1 To 3 ZZ = Z For k = 1 To 3 If (j <> 2 And k <> 2) Then Menger(g, X, YY, ZZ, L) ZZ = ZZ + L Next YY = YY + L Next End Sub Private Sub Menger(g As Graphics, X As Double, Y As Double, Z As Double, L As Double) Dim LL As Double, XX As Double, LL3 As Double If L < 4 Then drawCell(g, X, Y, Z, L) Else LL = L / 3 : LL3 = LL / 3 XX = X : face1(g, XX, Y, Z, LL) XX = XX - LL3 : face2(g, XX, Y, Z, LL) XX = XX - LL3 : face1(g, XX, Y, Z, LL) End If End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim g As Graphics = PictureBox1.CreateGraphics() g.Clear(Color.White) Menger(g, 0, 0, 0, 6 * 3 ^ 3) End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load B1 = New SolidBrush(Color.Red) B2 = New SolidBrush(Color.Yellow) B3 = New SolidBrush(Color.DarkBlue) End Sub End Class