Kronecker product based fractals

From Rosetta Code
Task
Kronecker product based fractals
You are encouraged to solve this task according to the task description, using any language you may know.

This task is based on   Kronecker product   of two matrices.

If your language has no a built-in function for such product then you need to implement it first.

The essence of fractals is self-replication (at least, self-similar replications).

So, using   n   times self-product of the matrix   (filled with 0/1)   we will have a fractal of the   nth   order.

Actually, "self-product" is a Kronecker power of the matrix.

In other words: for a matrix   M   and a power   n   create a function like   matkronpow(M, n),
which returns   MxMxMx...   (n   times product).

A formal recurrent algorithm of creating Kronecker power of a matrix is the following:


Algorithm
  • Let M is an initial matrix, and Rn is a resultant block matrix of the Kronecker power, where n is the power (a.k.a. order).
  • Self-product of M, i.e., M x M producing R2 (resultant matrix with order/power 2).
  • To receive the next order/power matrix use this recurrent formula: Rn = R(n-1) x M.
  • Plot this Rn matrix to produce the nth order fractal.

Even just looking at the resultant matrix you can see what will be plotted.
There are virtually infinitely many fractals of this type. You are limited only by your creativity and the power of your computer.


Task

Using Kronecker product implement and show two popular and well-known fractals, i.e.:


The last one ( Sierpinski carpet) is already here on RC, but built using different approaches.


Test cases

These 2 fractals (each order/power 4 at least) should be built using the following 2 simple matrices:

          │ 0 1 0 │    and    │ 1 1 1 │
          │ 1 1 1 │           │ 1 0 1 │
          │ 0 1 0 │           │ 1 1 1 │
Note
  • Output could be a graphical or ASCII-art representation, but if an order is set > 4 then printing is not suitable.
  • The orientation and distortion of the fractal could be your language/tool specific.
  • It would be nice to see one additional fractal of your choice, e.g., based on using a single (double) letter(s) of an alphabet, any sign(s) or already made a resultant matrix of the Kronecker product.


See implementations and results below in JavaScript, PARI/GP and R languages. They have additional samples of "H", "+" and checkerboard fractals.

11l

Translation of: Nim
F kroneckerProduct(a, b)
   V m = a.len
   V n = a[0].len
   V p = b.len
   V q = b[0].len
   V result = [[0] * (n * q)] * (m * p)
   L(i) 0 .< m
      L(j) 0 .< n
         L(k) 0 .< p
            L(l) 0 .< q
               result[i * p + k][j * q + l] = a[i][j] * b[k][l]
   R result

F kroneckerPower(m, n)
   V result = m
   L 2..n
      result = kroneckerProduct(result, m)
   R result

F to_str(m)
   V result = ‘’
   L(row) m
      L(val) row
         result ‘’= I val == 0 {‘  ’} E ‘ *’
      result ‘’= "\n"
   R result

V a1 = [[0, 1, 0], [1, 1, 1], [0, 1, 0]]
print(‘Vicsek fractal:’)
print(to_str(kroneckerPower(a1, 4)))
print()
V a2 = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
print(‘Sierpinski carpet fractal:’)
print(to_str(kroneckerPower(a2, 4)))
Output:

The same as in Nim solution.

Action!

The user must type in the monitor the following command after compilation and before running the program!
SET EndProg=*
CARD EndProg ;required for ALLOCATE.ACT

INCLUDE "D2:ALLOCATE.ACT" ;from the Action! Tool Kit. You must type 'SET EndProg=*' from the monitor after compiling, but before running this program!

DEFINE PTR="CARD"
DEFINE MATRIX_SIZE="4"
TYPE Matrix=[
  BYTE width,height
  PTR data]

PTR FUNC CreateEmpty(BYTE w,h)
  Matrix POINTER m

  m=Alloc(MATRIX_SIZE)
  m.width=w
  m.height=h
  m.data=Alloc(w*h)
RETURN (m)

PTR FUNC Create(BYTE w,h BYTE ARRAY a)
  Matrix POINTER m

  m=CreateEmpty(w,h)
  MoveBlock(m.data,a,w*h)
RETURN (m)

PROC Destroy(Matrix POINTER m)
  Free(m.data,m.width*m.height)
  Free(m,MATRIX_SIZE) 
RETURN

PTR FUNC Product(Matrix POINTER m1,m2)
  Matrix POINTER m
  BYTE x1,x2,y1,y2
  INT i1,i2,i
  BYTE ARRAY a1,a2,a

  m=CreateEmpty(m1.width*m2.width,m1.height*m2.height)
  a1=m1.data
  a2=m2.data
  a=m.data
  i=0
  FOR y1=0 TO m1.height-1
  DO
    FOR y2=0 TO m2.height-1
    DO
      FOR x1=0 TO m1.width-1
      DO
        FOR x2=0 TO m2.width-1
        DO
          i1=y1*m1.width+x1
          i2=y2*m2.width+x2
          a(i)=a1(i1)*a2(i2)
          i==+1
        OD
      OD
    OD
  OD
RETURN (m)

PROC DrawMatrix(Matrix POINTER m INT x,y)
  INT i,j
  BYTE ARRAY d

  d=m.data
  FOR j=0 TO m.height-1
  DO
    FOR i=0 TO m.width-1
    DO
      IF d(j*m.width+i) THEN
        Plot(x+i,y+j)
      FI
    OD
  OD
RETURN

PROC DrawFractal(BYTE ARRAY a BYTE w,h INT x,y BYTE n)
  Matrix POINTER m1,m2,m3
  BYTE i
  
  m1=Create(w,h,a)
  m2=Create(w,h,a)
  FOR i=1 TO n
  DO
    m3=Product(m1,m2)
    IF i<n THEN
      Destroy(m1)
      m1=m3 m3=0
    FI
  OD

  DrawMatrix(m3,x,y)

  Destroy(m1)
  Destroy(m2)
  Destroy(m3)
RETURN

PROC Main()
  BYTE CH=$02FC,COLOR1=$02C5,COLOR2=$02C6
  BYTE ARRAY a=[0 1 0 1 1 1 0 1 0],
    b=[1 1 1 1 0 1 1 1 1],
    c=[1 0 1 0 1 0 1 0 1]

  Graphics(8+16)
  AllocInit(0)
  Color=1
  COLOR1=$0C
  COLOR2=$02

  DrawFractal(a,3,3,12,55,3)
  DrawFractal(b,3,3,120,55,3)
  DrawFractal(c,3,3,226,55,3)

  DO UNTIL CH#$FF OD
  CH=$FF
RETURN
Output:

Screenshot from Atari 8-bit computer

Ada

Library: SDLAda
Using multiplication function from Kronecker product.
with SDL.Video.Windows.Makers;
with SDL.Video.Renderers.Makers;
with SDL.Events.Events;
with SDL.Events.Mice;

procedure Kronecker_Fractals is

   Width  : constant := 800;
   Height : constant := 800;
   Order  : constant := 6;

   Window   : SDL.Video.Windows.Window;
   Renderer : SDL.Video.Renderers.Renderer;

   type Matrix is array (Positive range <>, Positive range <>) of Integer;

   function "*" (Left, Right : in Matrix) return Matrix is
      Result : Matrix
        (1 .. Left'Length (1) * Right'Length (1),
         1 .. Left'Length (2) * Right'Length (2));
      LI : Natural := 0;
      LJ : Natural := 0;
   begin
      for I in 0 .. Result'Length (1) - 1 loop
         for J in 0 .. Result'Length (2) - 1 loop
            Result (I + 1, J + 1) :=
              Left (Left'First (1) + (LI), Left'First (2) + (LJ))
              * Right
              (Right'First (1) + (I mod Right'Length (1)),
               Right'First (2) + (J mod Right'Length (2)));
            if (J + 1) mod Right'Length (2) = 0 then
               LJ := LJ + 1;
            end if;
         end loop;
         if (I + 1) mod Right'Length (1) = 0 then
            LI := LI + 1;
         end if;
         LJ := 0;
      end loop;
      return Result;
   end "*";

   function "**" (Base : Matrix; Exp : Positive) return Matrix is
      (case Exp is
         when 1      => Base,
         when 2      => Base * Base,
         when others => Base * Base ** (Exp - 1));

   procedure Draw_Matrix (LX, LY : Integer; M : Matrix) is
      use SDL.C;
   begin
      for Y in M'Range (1) loop
         for X in M'Range (2) loop
            if M (Y, X) /= 0 then
               Renderer.Draw (Point => (int (LX + X), int (LY + Y)));
            end if;
         end loop;
      end loop;
   end Draw_Matrix;

   type Fractals is (Cross, H, X, Sierpinski, U);
   Base : Fractals := Fractals'First;

   M : constant array (Fractals) of Matrix (1 .. 3, 1 .. 3) :=
     (Cross      => ((0, 1, 0), (1, 1, 1), (0, 1, 0)),
      H          => ((1, 0, 1), (1, 1, 1), (1, 0, 1)),
      X          => ((1, 0, 1), (0, 1, 0), (1, 0, 1)),
      Sierpinski => ((1, 1, 1), (1, 0, 1), (1, 1, 1)),
      U          => ((1, 0, 1), (1, 0, 1), (1, 1, 1)));

   procedure Draw is
   begin
      Renderer.Set_Draw_Colour ((0, 0, 0, 255));
      Renderer.Fill (Rectangle => (0, 0, Width, Height));

      Renderer.Set_Draw_Colour (Colour => (0, 220, 0, 255));
      Draw_Matrix (10, 10, M (Base) ** Order);
      Window.Update_Surface;
      Base := (if Base = Fractals'Last
                    then Fractals'First
                    else Fractals'Succ (Base));
   end Draw;

   procedure Event_Loop is
      use type SDL.Events.Event_Types;
      Event : SDL.Events.Events.Events;
   begin
      loop
         SDL.Events.Events.Wait (Event);
         case Event.Common.Event_Type is
            when SDL.Events.Quit             => return;
            when SDL.Events.Mice.Button_Down => Draw;
            when others                      => null;
         end case;
      end loop;
   end Event_Loop;

begin
   if not SDL.Initialise (Flags => SDL.Enable_Screen) then
      return;
   end if;

   SDL.Video.Windows.Makers.Create (Win      => Window,
                                    Title    => "Kronecker fractals (Click to cycle)",
                                    Position => SDL.Natural_Coordinates'(X => 10, Y => 10),
                                    Size     => SDL.Positive_Sizes'(Width, Height),
                                    Flags    => 0);
   SDL.Video.Renderers.Makers.Create (Renderer, Window.Get_Surface);

   Draw;
   Event_Loop;
   Window.Finalize;
   SDL.Finalise;
end Kronecker_Fractals;

ALGOL 68

BEGIN # Kronecker product based fractals - translated from the Kotlin sample #

    MODE MATRIX = FLEX[ 1 : 0, 1 : 0 ]INT;

    PROC kronecker product = ( MATRIX a in, b in )MATRIX:
         BEGIN
             MATRIX a = a in[ AT 0, AT 0 ], b = b in[ AT 0, AT 0 ];
             INT m   = 1 UPB a + 1, n = 2 UPB a + 1;
             INT p   = 1 UPB b + 1, q = 2 UPB b + 1;
             INT rtn = m * p, ctn = n * q;
             [ 0 : rtn - 1, 0 : ctn - 1 ]INT r;
             FOR i FROM 0 TO rtn - 1 DO FOR j FROM 0 TO ctn - 1 DO r[ i, j ] := 0 OD OD;
             FOR i FROM 0 TO m - 1 DO
                 FOR j FROM 0 TO n - 1 DO
                     FOR k FROM 0 TO p - 1 DO
                         FOR l FROM 0 TO q - 1 DO
                             r[ p * i + k, q * j + l ] := a[ i, j ] * b[ k, l ]
                         OD
                     OD
                 OD
             OD;
             r
         END # kronecker product # ;

    PROC kronecker power = ( MATRIX a, INT n )MATRIX:
         BEGIN
             MATRIX pow := a;
             FOR i TO n - 1 DO pow := kronecker product( pow, a ) OD;
             pow
         END # kronecker power # ;

    PROC print matrix = ( STRING text, MATRIX m )VOID:
         BEGIN
             print( ( text, " fractal :", newline ) );
             FOR i FROM 1 LWB m TO 1 UPB m DO
                 FOR j FROM 2 LWB m TO 2 UPB m DO
                     print( ( IF m[ i, j ] = 1 THEN "*" ELSE " " FI ) )
                 OD;
                 print( ( newline ) )
             OD;
             print( ( newline ) )
         END # print matrix # ;

    MATRIX a := MATRIX( ( 0, 1, 0 )
                      , ( 1, 1, 1 )
                      , ( 0, 1, 0 )
                      );
    print matrix( "Vicsek", kronecker power( a, 4 ) );

    a := MATRIX( ( 1, 1, 1 )
               , ( 1, 0, 1 )
               , ( 1, 1, 1 )
               );
    print matrix( "Sierpinski carpet", kronecker power( a, 4 ) )
END
Output:

Same as the Kotlin sample.

C

Although this task is related to Kronecker product, this is computationally a more complex task as the matrix has to be raised to an arbitrary power. Assume matrix A, order i x j has to be raised to power n, the final result will have (i^n)x(j^n) elements. Doing this "conventionally" will require at least (i^n)x(j^n) operations with storage for the same number of elements. This means a storage requirement of 4 x (i^n) x (j^n) bytes for an integer matrix.

However, if half of the elements of the initial matrix A are zeroes, computations and storage for such elements are wasted as they will never be plotted. The only relevant elements are the 1s.

Thus this implementation treats the initial matrix as a Sparse matrix. Doing so cuts down drastically on the required storage and number of operations. The graphical part needs the WinBGIm library.

#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>

typedef struct{
    int row, col;
}cell;

int ROW,COL,SUM=0;

unsigned long raiseTo(int base,int power){
    if(power==0)
        return 1;
    else
        return base*raiseTo(base,power-1);
}

cell* kroneckerProduct(char* inputFile,int power){
    FILE* fp = fopen(inputFile,"r");
    
    int i,j,k,l;
    unsigned long prod;
    int** matrix;
    cell *coreList,*tempList,*resultList;
    
    fscanf(fp,"%d%d",&ROW,&COL);
    
    matrix = (int**)malloc(ROW*sizeof(int*));
    
    for(i=0;i<ROW;i++){
        matrix[i] = (int*)malloc(COL*sizeof(int));
        for(j=0;j<COL;j++){
            fscanf(fp,"%d",&matrix[i][j]);
            if(matrix[i][j]==1)
                SUM++;
        }
    }
    
    coreList = (cell*)malloc(SUM*sizeof(cell));
    resultList = (cell*)malloc(SUM*sizeof(cell));
    
    k = 0;
    
    for(i=0;i<ROW;i++){
        for(j=0;j<COL;j++){
            if(matrix[i][j]==1){
                coreList[k].row = i+1;
                coreList[k].col = j+1;
                resultList[k].row = i+1;
                resultList[k].col = j+1;
                k++;
            }
        }
    }
    
    prod = k;
    
    for(i=2;i<=power;i++){
        tempList = (cell*)malloc(prod*k*sizeof(cell));
        
        l = 0;
        
        for(j=0;j<prod;j++){
            for(k=0;k<SUM;k++){
                tempList[l].row = (resultList[j].row-1)*ROW + coreList[k].row;
                tempList[l].col = (resultList[j].col-1)*COL + coreList[k].col;
                l++;
            }
        }
        
        free(resultList);
        
        prod *= k;
        
        resultList = (cell*)malloc(prod*sizeof(cell));
        
        for(j=0;j<prod;j++){
            resultList[j].row = tempList[j].row;
            resultList[j].col = tempList[j].col;
        }
        free(tempList);
    }
    
    return resultList;
}

int main(){
    char fileName[100];
    int power,i,length;
    
    cell* resultList;
    
    printf("Enter input file name : ");
    scanf("%s",fileName);
    
    printf("Enter power : ");
    scanf("%d",&power);
    
    resultList = kroneckerProduct(fileName,power);
    
    initwindow(raiseTo(ROW,power),raiseTo(COL,power),"Kronecker Product Fractal");
    
    length = raiseTo(SUM,power);

    for(i=0;i<length;i++){
        putpixel(resultList[i].row,resultList[i].col,15);
    }
    
    getch();
    
    closegraph();
    
    return 0;
}

C++

Library: Qt

This program produces image files in PNG format. The C++ code from Kronecker product is reused here.

#include <cassert>
#include <vector>

#include <QImage>

template <typename scalar_type> class matrix {
public:
    matrix(size_t rows, size_t columns)
        : rows_(rows), columns_(columns), elements_(rows * columns) {}
    matrix(size_t rows, size_t columns,
        const std::initializer_list<std::initializer_list<scalar_type>>& values)
        : rows_(rows), columns_(columns), elements_(rows * columns) {
        assert(values.size() <= rows_);
        size_t i = 0;
        for (const auto& row : values) {
            assert(row.size() <= columns_);
            std::copy(begin(row), end(row), &elements_[i]);
            i += columns_;
        }
    }
    size_t rows() const { return rows_; }
    size_t columns() const { return columns_; }

    const scalar_type& operator()(size_t row, size_t column) const {
        assert(row < rows_);
        assert(column < columns_);
        return elements_[row * columns_ + column];
    }
    scalar_type& operator()(size_t row, size_t column) {
        assert(row < rows_);
        assert(column < columns_);
        return elements_[row * columns_ + column];
    }
private:
    size_t rows_;
    size_t columns_;
    std::vector<scalar_type> elements_;
};

// See https://en.wikipedia.org/wiki/Kronecker_product
template <typename scalar_type>
matrix<scalar_type> kronecker_product(const matrix<scalar_type>& a,
                                      const matrix<scalar_type>& b) {
    size_t arows = a.rows();
    size_t acolumns = a.columns();
    size_t brows = b.rows();
    size_t bcolumns = b.columns();
    matrix<scalar_type> c(arows * brows, acolumns * bcolumns);
    for (size_t i = 0; i < arows; ++i)
        for (size_t j = 0; j < acolumns; ++j)
            for (size_t k = 0; k < brows; ++k)
                for (size_t l = 0; l < bcolumns; ++l)
                    c(i*brows + k, j*bcolumns + l) = a(i, j) * b(k, l);
    return c;
}

bool kronecker_fractal(const char* fileName, const matrix<unsigned char>& m, int order) {
    matrix<unsigned char> result = m;
    for (int i = 0; i < order; ++i)
        result = kronecker_product(result, m);

    size_t height = result.rows();
    size_t width = result.columns();
    size_t bytesPerLine = 4 * ((width + 3)/4);
    std::vector<uchar> imageData(bytesPerLine * height);

    for (size_t i = 0; i < height; ++i)
        for (size_t j = 0; j < width; ++j)
            imageData[i * bytesPerLine + j] = result(i, j);

    QImage image(&imageData[0], width, height, bytesPerLine, QImage::Format_Indexed8);
    QVector<QRgb> colours(2);
    colours[0] = qRgb(0, 0, 0);
    colours[1] = qRgb(255, 255, 255);
    image.setColorTable(colours);
    return image.save(fileName);
}

int main() {
    matrix<unsigned char> matrix1(3, 3, {{0,1,0}, {1,1,1}, {0,1,0}});
    matrix<unsigned char> matrix2(3, 3, {{1,1,1}, {1,0,1}, {1,1,1}});
    matrix<unsigned char> matrix3(2, 2, {{1,1}, {0,1}});
    kronecker_fractal("vicsek.png", matrix1, 5);
    kronecker_fractal("sierpinski_carpet.png", matrix2, 5);
    kronecker_fractal("sierpinski_triangle.png", matrix3, 8);
    return 0;
}
Output:

Media:Kronecker fractals sierpinski carpet.png
Media:Kronecker fractals sierpinski triangle.png
Media:Kronecker fractals vicsek.png

Factor

Works with: Factor version 0.99 2020-01-23
USING: io kernel math math.matrices.extras sequences ;

: mat-kron-pow ( m n -- m' )
    1 - [ dup kronecker-product ] times ;

: print-fractal ( m -- )
    [ [ 1 = "*" " " ? write ] each nl ] each ;
    
{ { 0 1 0 } { 1 1 1 } { 0 1 0 } }
{ { 1 1 1 } { 1 0 1 } { 1 1 1 } }
{ { 0 1 1 } { 0 1 0 } { 1 1 0 } }
[ 3 mat-kron-pow print-fractal ] tri@

Output shown at order 4 and 25% font size.

Output:
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
*********************************************************************************
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
                                        ** **    ** **             ** **    ** **
                                        *  *     *  *              *  *     *  * 
                                       ** **    ** **             ** **    ** ** 
                                        **       **                **       **   
                                        *        *                 *        *    
                                       **       **                **       **    
                                     ** **    ** **             ** **    ** **   
                                     *  *     *  *              *  *     *  *    
                                    ** **    ** **             ** **    ** **    
                                        ** **                      ** **         
                                        *  *                       *  *          
                                       ** **                      ** **          
                                        **                         **            
                                        *                          *             
                                       **                         **             
                                     ** **                      ** **            
                                     *  *                       *  *             
                                    ** **                      ** **             
                               ** **    ** **             ** **    ** **         
                               *  *     *  *              *  *     *  *          
                              ** **    ** **             ** **    ** **          
                               **       **                **       **            
                               *        *                 *        *             
                              **       **                **       **             
                            ** **    ** **             ** **    ** **            
                            *  *     *  *              *  *     *  *             
                           ** **    ** **             ** **    ** **             
                                        ** **    ** **                           
                                        *  *     *  *                            
                                       ** **    ** **                            
                                        **       **                              
                                        *        *                               
                                       **       **                               
                                     ** **    ** **                              
                                     *  *     *  *                               
                                    ** **    ** **                               
                                        ** **                                    
                                        *  *                                     
                                       ** **                                     
                                        **                                       
                                        *                                        
                                       **                                        
                                     ** **                                       
                                     *  *                                        
                                    ** **                                        
                               ** **    ** **                                    
                               *  *     *  *                                     
                              ** **    ** **                                     
                               **       **                                       
                               *        *                                        
                              **       **                                        
                            ** **    ** **                                       
                            *  *     *  *                                        
                           ** **    ** **                                        
             ** **    ** **             ** **    ** **                           
             *  *     *  *              *  *     *  *                            
            ** **    ** **             ** **    ** **                            
             **       **                **       **                              
             *        *                 *        *                               
            **       **                **       **                               
          ** **    ** **             ** **    ** **                              
          *  *     *  *              *  *     *  *                               
         ** **    ** **             ** **    ** **                               
             ** **                      ** **                                    
             *  *                       *  *                                     
            ** **                      ** **                                     
             **                         **                                       
             *                          *                                        
            **                         **                                        
          ** **                      ** **                                       
          *  *                       *  *                                        
         ** **                      ** **                                        
    ** **    ** **             ** **    ** **                                    
    *  *     *  *              *  *     *  *                                     
   ** **    ** **             ** **    ** **                                     
    **       **                **       **                                       
    *        *                 *        *                                        
   **       **                **       **                                        
 ** **    ** **             ** **    ** **                                       
 *  *     *  *              *  *     *  *                                        
** **    ** **             ** **    ** **                                        

Fortran

A Fortran 90 implementation. Uses dense matrices and dynamic allocation for working arrays.

program Kron_frac
  implicit none

  interface
    function matkronpow(M, n) result(Mpowern)
      integer, dimension(:,:), intent(in) :: M
      integer, intent(in) :: n
      integer, dimension(size(M, 1)**n, size(M,2)**n) :: Mpowern
    end function matkronpow

    function kron(A, B) result(M)
      integer, dimension(:,:), intent(in) :: A, B
      integer, dimension(size(A,1)*size(B,1), size(A,2)*size(B,2)) :: M
    end function kron

    subroutine write2file(M, filename)
      integer, dimension(:,:), intent(in) :: M
      character(*), intent(in) :: filename
    end subroutine write2file
  end interface

  integer, parameter :: n = 4
  integer, dimension(3,3) :: Vicsek, Sierpinski
  integer, dimension(4,4) :: Hadamard
  integer, dimension(3**n, 3**n) :: fracV, fracS
  integer, dimension(4**n, 4**n) :: fracH

  Vicsek = reshape( (/0, 1, 0,&
                      1, 1, 1,&
                      0, 1, 0/),&
                    (/3,3/) )

  Sierpinski = reshape( (/1, 1, 1,&
                          1, 0, 1,&
                          1, 1, 1/),&
                          (/3,3/) )

  Hadamard = transpose(reshape( (/ 1, 0, 1, 0,&
                         1, 0, 0, 1,&
                         1, 1, 0, 0,&
                         1, 1, 1, 1/),&
                         (/4,4/) ))

  fracV = matkronpow(Vicsek, n)
  fracS = matkronpow(Sierpinski, n)
  fracH = matkronpow(Hadamard, n)

  call write2file(fracV, 'Viczek.txt')
  call write2file(fracS, 'Sierpinski.txt')
  call write2file(fracH, 'Hadamard.txt')

end program

function matkronpow(M, n) result(Mpowern)
interface
function kron(A, B) result(M)
  integer, dimension(:,:), intent(in) :: A, B
  integer, dimension(size(A,1)*size(B,1), size(A,2)*size(B,2)) :: M
  end function kron
end interface

  integer, dimension(:,:), intent(in) :: M
  integer, intent(in) :: n
  integer, dimension(size(M, 1)**n, size(M,2)**n) :: Mpowern
  integer, dimension(:,:), allocatable :: work1, work2
  integer :: icount

  if (n <= 1) then
     Mpowern = M
  else
    allocate(work1(size(M,1), size(M,2)))
    work1 = M
    do icount = 2,n
      allocate(work2(size(M,1)**icount, size(M,2)**icount))
      work2 = kron(work1, M)
      deallocate(work1)
      allocate(work1(size(M,1)**icount, size(M,2)**icount))
      work1 = work2
      deallocate(work2)
    end do
    Mpowern = work1
    deallocate(work1)
  end if

end function matkronpow

function kron(A, B) result(M)
  integer, dimension(:,:), intent(in) :: A, B
  integer, dimension(size(A,1)*size(B,1), size(A,2)*size(B,2)) :: M
  integer :: ia, ja, ib, jb, im, jm

  do ja = 1, size(A, 2)
    do ia = 1, size(A, 1)
      do jb = 1, size(B, 2)
        do ib = 1, size(B, 1)
          im = (ia - 1)*size(B, 1) + ib
          jm = (ja - 1)*size(B, 2) + jb
          M(im, jm) = A(ia, ja) * B(ib, jb)
        end do
      end do
    end do
  end do

end function kron

subroutine write2file(M, filename)
  integer, dimension(:,:), intent(in) :: M
  character(*), intent(in) :: filename
  integer :: ii, jj
  integer, parameter :: fi = 10

  open(fi, file=filename, status='replace')

  do ii = 1,size(M, 1)
    do jj = 1,size(M,2)
      if (M(ii,jj) == 0) then
        write(fi, '(A)', advance='no') ' '
      else
        write(fi, '(A)', advance='no') '*'
      end if
    end do
    write(fi, '(A)') ' '
  end do

  close(fi)

end subroutine write2file
Output:
                                        *                                         
                                       ***                                        
                                        *                                         
                                     *  *  *                                      
                                    *********                                     
                                     *  *  *                                      
                                        *                                         
                                       ***                                        
                                        *                                         
                               *        *        *                                
                              ***      ***      ***                               
                               *        *        *                                
                            *  *  *  *  *  *  *  *  *                             
                           ***************************                            
                            *  *  *  *  *  *  *  *  *                             
                               *        *        *                                
                              ***      ***      ***                               
                               *        *        *                                
                                        *                                         
                                       ***                                        
                                        *                                         
                                     *  *  *                                      
                                    *********                                     
                                     *  *  *                                      
                                        *                                         
                                       ***                                        
                                        *                                         
             *                          *                          *              
            ***                        ***                        ***             
             *                          *                          *              
          *  *  *                    *  *  *                    *  *  *           
         *********                  *********                  *********          
          *  *  *                    *  *  *                    *  *  *           
             *                          *                          *              
            ***                        ***                        ***             
             *                          *                          *              
    *        *        *        *        *        *        *        *        *     
   ***      ***      ***      ***      ***      ***      ***      ***      ***    
    *        *        *        *        *        *        *        *        *     
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  
********************************************************************************* 
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  
    *        *        *        *        *        *        *        *        *     
   ***      ***      ***      ***      ***      ***      ***      ***      ***    
    *        *        *        *        *        *        *        *        *     
             *                          *                          *              
            ***                        ***                        ***             
             *                          *                          *              
          *  *  *                    *  *  *                    *  *  *           
         *********                  *********                  *********          
          *  *  *                    *  *  *                    *  *  *           
             *                          *                          *              
            ***                        ***                        ***             
             *                          *                          *              
                                        *                                         
                                       ***                                        
                                        *                                         
                                     *  *  *                                      
                                    *********                                     
                                     *  *  *                                      
                                        *                                         
                                       ***                                        
                                        *                                         
                               *        *        *                                
                              ***      ***      ***                               
                               *        *        *                                
                            *  *  *  *  *  *  *  *  *                             
                           ***************************                            
                            *  *  *  *  *  *  *  *  *                             
                               *        *        *                                
                              ***      ***      ***                               
                               *        *        *                                
                                        *                                         
                                       ***                                        
                                        *                                         
                                     *  *  *                                      
                                    *********                                     
                                     *  *  *                                      
                                        *                                         
                                       ***                                        
                                        *                                         
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * * 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
*********         ******************         ******************         ********* 
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** * 
*********         ******************         ******************         ********* 
***   ***         ***   ******   ***         ***   ******   ***         ***   *** 
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * * 
***   ***         ***   ******   ***         ***   ******   ***         ***   *** 
*********         ******************         ******************         ********* 
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** * 
*********         ******************         ******************         ********* 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * * 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
***************************                           *************************** 
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** * 
***************************                           *************************** 
***   ******   ******   ***                           ***   ******   ******   *** 
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * * 
***   ******   ******   ***                           ***   ******   ******   *** 
***************************                           *************************** 
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** * 
***************************                           *************************** 
*********         *********                           *********         ********* 
* ** ** *         * ** ** *                           * ** ** *         * ** ** * 
*********         *********                           *********         ********* 
***   ***         ***   ***                           ***   ***         ***   *** 
* *   * *         * *   * *                           * *   * *         * *   * * 
***   ***         ***   ***                           ***   ***         ***   *** 
*********         *********                           *********         ********* 
* ** ** *         * ** ** *                           * ** ** *         * ** ** * 
*********         *********                           *********         ********* 
***************************                           *************************** 
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** * 
***************************                           *************************** 
***   ******   ******   ***                           ***   ******   ******   *** 
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * * 
***   ******   ******   ***                           ***   ******   ******   *** 
***************************                           *************************** 
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** * 
***************************                           *************************** 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * * 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
*********         ******************         ******************         ********* 
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** * 
*********         ******************         ******************         ********* 
***   ***         ***   ******   ***         ***   ******   ***         ***   *** 
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * * 
***   ***         ***   ******   ***         ***   ******   ***         ***   *** 
*********         ******************         ******************         ********* 
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** * 
*********         ******************         ******************         ********* 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * * 
***   ******   ******   ******   ******   ******   ******   ******   ******   *** 
********************************************************************************* 
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 
********************************************************************************* 
* *     * *                     * *     * *                                                                                     * *     * *                     * *     * *                                                                                      
*  *    *  *                    *  *    *  *                                                                                    *  *    *  *                    *  *    *  *                                                                                     
**      **                      **      **                                                                                      **      **                      **      **                                                                                       
****    ****                    ****    ****                                                                                    ****    ****                    ****    ****                                                                                     
* *         * *                 * *         * *                                                                                 * *         * *                 * *         * *                                                                                  
*  *        *  *                *  *        *  *                                                                                *  *        *  *                *  *        *  *                                                                                 
**          **                  **          **                                                                                  **          **                  **          **                                                                                   
****        ****                ****        ****                                                                                ****        ****                ****        ****                                                                                 
* * * *                         * * * *                                                                                         * * * *                         * * * *                                                                                          
*  **  *                        *  **  *                                                                                        *  **  *                        *  **  *                                                                                         
**  **                          **  **                                                                                          **  **                          **  **                                                                                           
********                        ********                                                                                        ********                        ********                                                                                         
* * * * * * * *                 * * * * * * * *                                                                                 * * * * * * * *                 * * * * * * * *                                                                                  
*  **  **  **  *                *  **  **  **  *                                                                                *  **  **  **  *                *  **  **  **  *                                                                                 
**  **  **  **                  **  **  **  **                                                                                  **  **  **  **                  **  **  **  **                                                                                   
****************                ****************                                                                                ****************                ****************                                                                                 
* *     * *                                     * *     * *                                                                     * *     * *                                     * *     * *                                                                      
*  *    *  *                                    *  *    *  *                                                                    *  *    *  *                                    *  *    *  *                                                                     
**      **                                      **      **                                                                      **      **                                      **      **                                                                       
****    ****                                    ****    ****                                                                    ****    ****                                    ****    ****                                                                     
* *         * *                                 * *         * *                                                                 * *         * *                                 * *         * *                                                                  
*  *        *  *                                *  *        *  *                                                                *  *        *  *                                *  *        *  *                                                                 
**          **                                  **          **                                                                  **          **                                  **          **                                                                   
****        ****                                ****        ****                                                                ****        ****                                ****        ****                                                                 
* * * *                                         * * * *                                                                         * * * *                                         * * * *                                                                          
*  **  *                                        *  **  *                                                                        *  **  *                                        *  **  *                                                                         
**  **                                          **  **                                                                          **  **                                          **  **                                                                           
********                                        ********                                                                        ********                                        ********                                                                         
* * * * * * * *                                 * * * * * * * *                                                                 * * * * * * * *                                 * * * * * * * *                                                                  
*  **  **  **  *                                *  **  **  **  *                                                                *  **  **  **  *                                *  **  **  **  *                                                                 
**  **  **  **                                  **  **  **  **                                                                  **  **  **  **                                  **  **  **  **                                                                   
****************                                ****************                                                                ****************                                ****************                                                                 
* *     * *     * *     * *                                                                                                     * *     * *     * *     * *                                                                                                      
*  *    *  *    *  *    *  *                                                                                                    *  *    *  *    *  *    *  *                                                                                                     
**      **      **      **                                                                                                      **      **      **      **                                                                                                       
****    ****    ****    ****                                                                                                    ****    ****    ****    ****                                                                                                     
* *         * * * *         * *                                                                                                 * *         * * * *         * *                                                                                                  
*  *        *  **  *        *  *                                                                                                *  *        *  **  *        *  *                                                                                                 
**          **  **          **                                                                                                  **          **  **          **                                                                                                   
****        ********        ****                                                                                                ****        ********        ****                                                                                                 
* * * *         * * * *                                                                                                         * * * *         * * * *                                                                                                          
*  **  *        *  **  *                                                                                                        *  **  *        *  **  *                                                                                                         
**  **          **  **                                                                                                          **  **          **  **                                                                                                           
********        ********                                                                                                        ********        ********                                                                                                         
* * * * * * * * * * * * * * * *                                                                                                 * * * * * * * * * * * * * * * *                                                                                                  
*  **  **  **  **  **  **  **  *                                                                                                *  **  **  **  **  **  **  **  *                                                                                                 
**  **  **  **  **  **  **  **                                                                                                  **  **  **  **  **  **  **  **                                                                                                   
********************************                                                                                                ********************************                                                                                                 
* *     * *     * *     * *     * *     * *     * *     * *                                                                     * *     * *     * *     * *     * *     * *     * *     * *                                                                      
*  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *                                                                    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *                                                                     
**      **      **      **      **      **      **      **                                                                      **      **      **      **      **      **      **      **                                                                       
****    ****    ****    ****    ****    ****    ****    ****                                                                    ****    ****    ****    ****    ****    ****    ****    ****                                                                     
* *         * * * *         * * * *         * * * *         * *                                                                 * *         * * * *         * * * *         * * * *         * *                                                                  
*  *        *  **  *        *  **  *        *  **  *        *  *                                                                *  *        *  **  *        *  **  *        *  **  *        *  *                                                                 
**          **  **          **  **          **  **          **                                                                  **          **  **          **  **          **  **          **                                                                   
****        ********        ********        ********        ****                                                                ****        ********        ********        ********        ****                                                                 
* * * *         * * * *         * * * *         * * * *                                                                         * * * *         * * * *         * * * *         * * * *                                                                          
*  **  *        *  **  *        *  **  *        *  **  *                                                                        *  **  *        *  **  *        *  **  *        *  **  *                                                                         
**  **          **  **          **  **          **  **                                                                          **  **          **  **          **  **          **  **                                                                           
********        ********        ********        ********                                                                        ********        ********        ********        ********                                                                         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                                 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                                  
*  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  *                                                                *  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  *                                                                 
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **                                                                  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **                                                                   
****************************************************************                                                                ****************************************************************                                                                 
* *     * *                     * *     * *                                                                                                                                                     * *     * *                     * *     * *                      
*  *    *  *                    *  *    *  *                                                                                                                                                    *  *    *  *                    *  *    *  *                     
**      **                      **      **                                                                                                                                                      **      **                      **      **                       
****    ****                    ****    ****                                                                                                                                                    ****    ****                    ****    ****                     
* *         * *                 * *         * *                                                                                                                                                 * *         * *                 * *         * *                  
*  *        *  *                *  *        *  *                                                                                                                                                *  *        *  *                *  *        *  *                 
**          **                  **          **                                                                                                                                                  **          **                  **          **                   
****        ****                ****        ****                                                                                                                                                ****        ****                ****        ****                 
* * * *                         * * * *                                                                                                                                                         * * * *                         * * * *                          
*  **  *                        *  **  *                                                                                                                                                        *  **  *                        *  **  *                         
**  **                          **  **                                                                                                                                                          **  **                          **  **                           
********                        ********                                                                                                                                                        ********                        ********                         
* * * * * * * *                 * * * * * * * *                                                                                                                                                 * * * * * * * *                 * * * * * * * *                  
*  **  **  **  *                *  **  **  **  *                                                                                                                                                *  **  **  **  *                *  **  **  **  *                 
**  **  **  **                  **  **  **  **                                                                                                                                                  **  **  **  **                  **  **  **  **                   
****************                ****************                                                                                                                                                ****************                ****************                 
* *     * *                                     * *     * *                                                                                                                                     * *     * *                                     * *     * *      
*  *    *  *                                    *  *    *  *                                                                                                                                    *  *    *  *                                    *  *    *  *     
**      **                                      **      **                                                                                                                                      **      **                                      **      **       
****    ****                                    ****    ****                                                                                                                                    ****    ****                                    ****    ****     
* *         * *                                 * *         * *                                                                                                                                 * *         * *                                 * *         * *  
*  *        *  *                                *  *        *  *                                                                                                                                *  *        *  *                                *  *        *  * 
**          **                                  **          **                                                                                                                                  **          **                                  **          **   
****        ****                                ****        ****                                                                                                                                ****        ****                                ****        **** 
* * * *                                         * * * *                                                                                                                                         * * * *                                         * * * *          
*  **  *                                        *  **  *                                                                                                                                        *  **  *                                        *  **  *         
**  **                                          **  **                                                                                                                                          **  **                                          **  **           
********                                        ********                                                                                                                                        ********                                        ********         
* * * * * * * *                                 * * * * * * * *                                                                                                                                 * * * * * * * *                                 * * * * * * * *  
*  **  **  **  *                                *  **  **  **  *                                                                                                                                *  **  **  **  *                                *  **  **  **  * 
**  **  **  **                                  **  **  **  **                                                                                                                                  **  **  **  **                                  **  **  **  **   
****************                                ****************                                                                                                                                ****************                                **************** 
* *     * *     * *     * *                                                                                                                                                                     * *     * *     * *     * *                                      
*  *    *  *    *  *    *  *                                                                                                                                                                    *  *    *  *    *  *    *  *                                     
**      **      **      **                                                                                                                                                                      **      **      **      **                                       
****    ****    ****    ****                                                                                                                                                                    ****    ****    ****    ****                                     
* *         * * * *         * *                                                                                                                                                                 * *         * * * *         * *                                  
*  *        *  **  *        *  *                                                                                                                                                                *  *        *  **  *        *  *                                 
**          **  **          **                                                                                                                                                                  **          **  **          **                                   
****        ********        ****                                                                                                                                                                ****        ********        ****                                 
* * * *         * * * *                                                                                                                                                                         * * * *         * * * *                                          
*  **  *        *  **  *                                                                                                                                                                        *  **  *        *  **  *                                         
**  **          **  **                                                                                                                                                                          **  **          **  **                                           
********        ********                                                                                                                                                                        ********        ********                                         
* * * * * * * * * * * * * * * *                                                                                                                                                                 * * * * * * * * * * * * * * * *                                  
*  **  **  **  **  **  **  **  *                                                                                                                                                                *  **  **  **  **  **  **  **  *                                 
**  **  **  **  **  **  **  **                                                                                                                                                                  **  **  **  **  **  **  **  **                                   
********************************                                                                                                                                                                ********************************                                 
* *     * *     * *     * *     * *     * *     * *     * *                                                                                                                                     * *     * *     * *     * *     * *     * *     * *     * *      
*  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *                                                                                                                                    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *     
**      **      **      **      **      **      **      **                                                                                                                                      **      **      **      **      **      **      **      **       
****    ****    ****    ****    ****    ****    ****    ****                                                                                                                                    ****    ****    ****    ****    ****    ****    ****    ****     
* *         * * * *         * * * *         * * * *         * *                                                                                                                                 * *         * * * *         * * * *         * * * *         * *  
*  *        *  **  *        *  **  *        *  **  *        *  *                                                                                                                                *  *        *  **  *        *  **  *        *  **  *        *  * 
**          **  **          **  **          **  **          **                                                                                                                                  **          **  **          **  **          **  **          **   
****        ********        ********        ********        ****                                                                                                                                ****        ********        ********        ********        **** 
* * * *         * * * *         * * * *         * * * *                                                                                                                                         * * * *         * * * *         * * * *         * * * *          
*  **  *        *  **  *        *  **  *        *  **  *                                                                                                                                        *  **  *        *  **  *        *  **  *        *  **  *         
**  **          **  **          **  **          **  **                                                                                                                                          **  **          **  **          **  **          **  **           
********        ********        ********        ********                                                                                                                                        ********        ********        ********        ********         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                                                                                                 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  
*  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  *                                                                                                                                *  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  * 
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **                                                                                                                                  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **   
****************************************************************                                                                                                                                **************************************************************** 
* *     * *                     * *     * *                     * *     * *                     * *     * *                                                                                                                                                      
*  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                                                                                                                                                     
**      **                      **      **                      **      **                      **      **                                                                                                                                                       
****    ****                    ****    ****                    ****    ****                    ****    ****                                                                                                                                                     
* *         * *                 * *         * *                 * *         * *                 * *         * *                                                                                                                                                  
*  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                                                                                                                                                 
**          **                  **          **                  **          **                  **          **                                                                                                                                                   
****        ****                ****        ****                ****        ****                ****        ****                                                                                                                                                 
* * * *                         * * * *                         * * * *                         * * * *                                                                                                                                                          
*  **  *                        *  **  *                        *  **  *                        *  **  *                                                                                                                                                         
**  **                          **  **                          **  **                          **  **                                                                                                                                                           
********                        ********                        ********                        ********                                                                                                                                                         
* * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                                                                                                                                                  
*  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                                                                                                                                                 
**  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                                                                                                                                                   
****************                ****************                ****************                ****************                                                                                                                                                 
* *     * *                                     * *     * *     * *     * *                                     * *     * *                                                                                                                                      
*  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *                                                                                                                                     
**      **                                      **      **      **      **                                      **      **                                                                                                                                       
****    ****                                    ****    ****    ****    ****                                    ****    ****                                                                                                                                     
* *         * *                                 * *         * * * *         * *                                 * *         * *                                                                                                                                  
*  *        *  *                                *  *        *  **  *        *  *                                *  *        *  *                                                                                                                                 
**          **                                  **          **  **          **                                  **          **                                                                                                                                   
****        ****                                ****        ********        ****                                ****        ****                                                                                                                                 
* * * *                                         * * * *         * * * *                                         * * * *                                                                                                                                          
*  **  *                                        *  **  *        *  **  *                                        *  **  *                                                                                                                                         
**  **                                          **  **          **  **                                          **  **                                                                                                                                           
********                                        ********        ********                                        ********                                                                                                                                         
* * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * *                                                                                                                                  
*  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  *                                                                                                                                 
**  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **                                                                                                                                   
****************                                ********************************                                ****************                                                                                                                                 
* *     * *     * *     * *                                     * *     * *     * *     * *                                                                                                                                                                      
*  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                                                                                                                                                     
**      **      **      **                                      **      **      **      **                                                                                                                                                                       
****    ****    ****    ****                                    ****    ****    ****    ****                                                                                                                                                                     
* *         * * * *         * *                                 * *         * * * *         * *                                                                                                                                                                  
*  *        *  **  *        *  *                                *  *        *  **  *        *  *                                                                                                                                                                 
**          **  **          **                                  **          **  **          **                                                                                                                                                                   
****        ********        ****                                ****        ********        ****                                                                                                                                                                 
* * * *         * * * *                                         * * * *         * * * *                                                                                                                                                                          
*  **  *        *  **  *                                        *  **  *        *  **  *                                                                                                                                                                         
**  **          **  **                                          **  **          **  **                                                                                                                                                                           
********        ********                                        ********        ********                                                                                                                                                                         
* * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                                                                                                                                                  
*  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                                                                                                                                                 
**  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                                                                                                                                                   
********************************                                ********************************                                                                                                                                                                 
* *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *                                                                                                                                      
*  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *                                                                                                                                     
**      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **                                                                                                                                       
****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****                                                                                                                                     
* *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * *                                                                                                                                  
*  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  *                                                                                                                                 
**          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **                                                                                                                                   
****        ********        ********        ********        ********        ********        ********        ********        ****                                                                                                                                 
* * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *                                                                                                                                          
*  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *                                                                                                                                         
**  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **                                                                                                                                           
********        ********        ********        ********        ********        ********        ********        ********                                                                                                                                         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                                                                                                  
*  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  *                                                                                                                                 
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **                                                                                                                                   
********************************************************************************************************************************                                                                                                                                 
* *     * *                     * *     * *                     * *     * *                     * *     * *                     * *     * *                     * *     * *                     * *     * *                     * *     * *                      
*  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                    *  *    *  *                     
**      **                      **      **                      **      **                      **      **                      **      **                      **      **                      **      **                      **      **                       
****    ****                    ****    ****                    ****    ****                    ****    ****                    ****    ****                    ****    ****                    ****    ****                    ****    ****                     
* *         * *                 * *         * *                 * *         * *                 * *         * *                 * *         * *                 * *         * *                 * *         * *                 * *         * *                  
*  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                *  *        *  *                 
**          **                  **          **                  **          **                  **          **                  **          **                  **          **                  **          **                  **          **                   
****        ****                ****        ****                ****        ****                ****        ****                ****        ****                ****        ****                ****        ****                ****        ****                 
* * * *                         * * * *                         * * * *                         * * * *                         * * * *                         * * * *                         * * * *                         * * * *                          
*  **  *                        *  **  *                        *  **  *                        *  **  *                        *  **  *                        *  **  *                        *  **  *                        *  **  *                         
**  **                          **  **                          **  **                          **  **                          **  **                          **  **                          **  **                          **  **                           
********                        ********                        ********                        ********                        ********                        ********                        ********                        ********                         
* * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                 * * * * * * * *                  
*  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                *  **  **  **  *                 
**  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                  **  **  **  **                   
****************                ****************                ****************                ****************                ****************                ****************                ****************                ****************                 
* *     * *                                     * *     * *     * *     * *                                     * *     * *     * *     * *                                     * *     * *     * *     * *                                     * *     * *      
*  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *     
**      **                                      **      **      **      **                                      **      **      **      **                                      **      **      **      **                                      **      **       
****    ****                                    ****    ****    ****    ****                                    ****    ****    ****    ****                                    ****    ****    ****    ****                                    ****    ****     
* *         * *                                 * *         * * * *         * *                                 * *         * * * *         * *                                 * *         * * * *         * *                                 * *         * *  
*  *        *  *                                *  *        *  **  *        *  *                                *  *        *  **  *        *  *                                *  *        *  **  *        *  *                                *  *        *  * 
**          **                                  **          **  **          **                                  **          **  **          **                                  **          **  **          **                                  **          **   
****        ****                                ****        ********        ****                                ****        ********        ****                                ****        ********        ****                                ****        **** 
* * * *                                         * * * *         * * * *                                         * * * *         * * * *                                         * * * *         * * * *                                         * * * *          
*  **  *                                        *  **  *        *  **  *                                        *  **  *        *  **  *                                        *  **  *        *  **  *                                        *  **  *         
**  **                                          **  **          **  **                                          **  **          **  **                                          **  **          **  **                                          **  **           
********                                        ********        ********                                        ********        ********                                        ********        ********                                        ********         
* * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * *  
*  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  * 
**  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **   
****************                                ********************************                                ********************************                                ********************************                                **************** 
* *     * *     * *     * *                                     * *     * *     * *     * *                                     * *     * *     * *     * *                                     * *     * *     * *     * *                                      
*  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                    *  *    *  *    *  *    *  *                                     
**      **      **      **                                      **      **      **      **                                      **      **      **      **                                      **      **      **      **                                       
****    ****    ****    ****                                    ****    ****    ****    ****                                    ****    ****    ****    ****                                    ****    ****    ****    ****                                     
* *         * * * *         * *                                 * *         * * * *         * *                                 * *         * * * *         * *                                 * *         * * * *         * *                                  
*  *        *  **  *        *  *                                *  *        *  **  *        *  *                                *  *        *  **  *        *  *                                *  *        *  **  *        *  *                                 
**          **  **          **                                  **          **  **          **                                  **          **  **          **                                  **          **  **          **                                   
****        ********        ****                                ****        ********        ****                                ****        ********        ****                                ****        ********        ****                                 
* * * *         * * * *                                         * * * *         * * * *                                         * * * *         * * * *                                         * * * *         * * * *                                          
*  **  *        *  **  *                                        *  **  *        *  **  *                                        *  **  *        *  **  *                                        *  **  *        *  **  *                                         
**  **          **  **                                          **  **          **  **                                          **  **          **  **                                          **  **          **  **                                           
********        ********                                        ********        ********                                        ********        ********                                        ********        ********                                         
* * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                 * * * * * * * * * * * * * * * *                                  
*  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                *  **  **  **  **  **  **  **  *                                 
**  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                  **  **  **  **  **  **  **  **                                   
********************************                                ********************************                                ********************************                                ********************************                                 
* *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *     * *      
*  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *    *  *     
**      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **      **       
****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****    ****     
* *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * *  
*  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  * 
**          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **   
****        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        **** 
* * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *         * * * *          
*  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *        *  **  *         
**  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **          **  **           
********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********        ********         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  
*  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  * 
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **   
**************************************************************************************************************************************************************************************************************************************************************** 

gnuplot

File for the load command is the only possible imitation of the fine function in the gnuplot.

Note
  • Find plotff.gp here on RC
  • dat-files are PARI/GP generated output files. They are too big to post them here on RC.


Works with: gnuplot version 5.0 (patchlevel 3) and above
File:Pkf1.png
Output pkf1.png
File:Pkf2.png
Output pkf2.png
File:Pkf3.png
Output pkf3.png
## KPF.gp 4/8/17 aev
## Plotting 3 KPF pictures.
## dat-files are PARI/GP generated output files: 
#cd 'C:\gnupData'

##PKF1 from PARI/GP created file pkf1.dat
ttl = "Vicsec fractal"; clr = '"blue"'; filename = "pkf1"; 
load "plotff.gp"

##PKF2 from PARI/GP created file pkf2.dat
ttl = "Sierpinski carpet fractal"; clr = '"navy"';filename = "pkf2";
load "plotff.gp"

##PKF3 from PARI/GP created file pkf3.dat
ttl = "Sierpinski triangle fractal"; clr = '"dark-green"'; filename = "pkf3";
load "plotff.gp"
Output:
3 plotted files: pkf1.png, pkf2.png and pkf3.png.

Fōrmulæ

Fōrmulæ programs are not textual, visualization/edition of programs is done showing/manipulating structures but not text. Moreover, there can be multiple visual representations of the same program. Even though it is possible to have textual representation —i.e. XML, JSON— they are intended for storage and transfer purposes more than visualization and edition.

Programs in Fōrmulæ are created/edited online in its website.

In this page you can see and run the program(s) related to this task and their results. You can also change either the programs or the parameters they are called with, for experimentation, but remember that these programs were created with the main purpose of showing a clear solution of the task, and they generally lack any kind of validation.

Solution

Test case 1. Vicsek fractal

Cross form

Saltire form

Test case 2. Sierpiński carpet fractal

Test case 3. Sierpiński triangle fractal

Test case 3. Other cases

Test case 4. Numbers between 0 and 1 can be used, to produce greyscale shades

(click to enlarge)

Go

Translation of: Kotlin
package main

import "fmt"

type matrix [][]int

func (m1 matrix) kroneckerProduct(m2 matrix) matrix {
    m := len(m1)
    n := len(m1[0])
    p := len(m2)
    q := len(m2[0])
    rtn := m * p
    ctn := n * q
    r := make(matrix, rtn)
    for i := range r {
        r[i] = make([]int, ctn) // all elements zero by default
    }
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            for k := 0; k < p; k++ {
                for l := 0; l < q; l++ {
                    r[p*i+k][q*j+l] = m1[i][j] * m2[k][l]
                }
            }
        }
    }
    return r
}

func (m matrix) kroneckerPower(n int) matrix {
    pow := m
    for i := 1; i < n; i++ {
        pow = pow.kroneckerProduct(m)
    }
    return pow
}

func (m matrix) print(text string) {
    fmt.Println(text, "fractal :\n")
    for i := range m {
        for j := range m[0] {
            if m[i][j] == 1 {
                fmt.Print("*")
            } else {
                fmt.Print(" ")
            }
        }
        fmt.Println()
    }
    fmt.Println()
}

func main() {
    m1 := matrix{{0, 1, 0}, {1, 1, 1}, {0, 1, 0}}
    m1.kroneckerPower(4).print("Vivsek")

    m2 := matrix{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}
    m2.kroneckerPower(4).print("Sierpinski carpet")
}
Output:
Same as Kotlin entry.

Haskell

Works with: Chrome and Firefox

This implementation compiles to javascript that runs in the browser using the ghcjs compiler . The reflex-dom library is used to help with svg rendering.

{-# LANGUAGE OverloadedStrings #-}
import Reflex
import Reflex.Dom
import Data.Map as DM (Map, fromList)
import Data.Text (Text, pack)
import Data.List (transpose)

-- Show Vicsek and Sierpinski Carpet fractals
main :: IO ()
main = mainWidget $ do 
  elAttr "h1" ("style" =: "color:black") $ text "Kroneker Product Based Fractals" 
  elAttr "a" ("href" =: "http://rosettacode.org/wiki/Kronecker_product_based_fractals#Haskell") $ text "Rosetta Code / Kroneker product based fractals / Haskell"

  -- Show a Vicsek fractal
  el "br" $ return ()
  elAttr "h2" ("style" =: "color:brown") $ text "Vicsek Fractal" 
  showFractal [[0, 1, 0] ,[1, 1, 1] ,[0, 1, 0] ]

  -- Show a Sierpinski Carpet fractal
  el "br" $ return ()
  elAttr "h2" ("style" =: "color:brown") $ text "Sierpinski Carpet Fractal" 
  showFractal [[1, 1, 1] ,[1, 0, 1] ,[1, 1, 1] ]

-- Size in pixels of an individual cell
cellSize :: Int
cellSize = 8

-- Given a "seed" matrix, generate and display a fractal.
showFractal :: MonadWidget t m => [[Int]] -> m ()
showFractal seed = do
  let boardAttrs w h = 
         fromList [ ("width" , pack $ show $ w * cellSize)
                  , ("height", pack $ show $ h * cellSize)
                  ]
      fractals = iterate (kronekerProduct seed) seed
      shown = fractals !! 3 -- the fourth fractal (starting from 0)
      w = length $ head shown
      h = length shown
  elSvgns "svg" (constDyn $ boardAttrs w h) $ showMatrix shown

-- Compute the Kroneker product of two matrices.
kronekerProduct :: Num a => [[a]] -> [[a]] -> [[a]]
kronekerProduct xs ys = 
    let m0 = flip $ fmap.fmap.(*)
        m1 = flip $ fmap.fmap.m0
    in concat $ fmap (fmap concat.transpose) $ m1 xs ys

-- Show an entire matrix
showMatrix :: MonadWidget t m => [[Int]] -> m ()
showMatrix m = mapM_ showRow $ zip [0..] m 

-- Show a single horizontal row of a matrix
showRow :: MonadWidget t m => (Int,[Int]) -> m ()
showRow (x,r) = mapM_ (showCell x) $ zip [0..] r 

-- Show a circle in a box moved to the correct location on screen
showCell :: MonadWidget t m => Int -> (Int,Int) -> m ()
showCell x (y,on) = 
  let boxAttrs (x,y) = -- Place box on screen
        fromList [ ("transform", 
                    pack $    "scale (" ++ show cellSize ++ ", " ++ show cellSize ++ ") " 
                           ++ "translate (" ++ show x ++ ", " ++ show y ++ ")" 
                   )
                 ] 

      cellAttrs = -- Draw circle in box.
        fromList [ ( "cx",      "0.5")
                 , ( "cy",      "0.5")
                 , ( "r",       "0.45")
                 , ( "style",   "fill:green")
                 ] 

  in if (on==1) then  -- Only draw circle for elements containing 1
       elSvgns "g"  (constDyn $ boxAttrs (x,y)) $ 
         elSvgns "circle" (constDyn $ cellAttrs) $ 
           return ()
     else
       return ()

-- Wrapper around elDynAttrNS'
elSvgns :: MonadWidget t m => Text -> Dynamic t (Map Text Text) -> m a -> m a
elSvgns t m ma = do
    (el, val) <- elDynAttrNS' (Just "http://www.w3.org/2000/svg") t m ma
    return val

Link to live demo: https://dc25.github.io/rosettaCode__Kronecker_product_based_fractals/ ( a little slow to load ).

J

Implementation:

V=: -.0 2 6 8 e.~i.3 3
S=: 4 ~:i.3 3
KP=: 1 3 ,/"2@(,/)@|: */

ascii_art=: ' *'{~]

KPfractal=:dyad def 'x&KP^:y,.1'

Task examples (order 4, 25% font size):

   ascii_art S KPfractal 4
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
   ascii_art V KPfractal 4
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
*********************************************************************************
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *

Java

This implementation does not use sparse matrices since the powers involved do not exceed 4.

package kronecker;

/**
 * Uses the Kronecker product powers of two rectangular matrices
 * to generate fractals and tests it with three examples.
 */
public class ProductFractals {
  /**
   * Find the Kronecker product of the arguments.
   * @param a The first matrix to multiply.
   * @param b The second matrix to multiply.
   * @return A new matrix: the Kronecker product of the arguments.
   */
  public static int[][] product(final int[][] a, final int[][] b) {
    // Create matrix c as the matrix to fill and return.
    // The length of a matrix is its number of rows.
    final int[][] c = new int[a.length*b.length][];
    // Fill in the (empty) rows of c.
    // The length of each row is the number of columns.
    for (int ix = 0; ix < c.length; ix++) {
      final int num_cols = a[0].length*b[0].length;
      c[ix] = new int[num_cols];
    }
    // Now fill in the values: the products of each pair.
    // Go through all the elements of a.
    for (int ia = 0; ia < a.length; ia++) {
      for (int ja = 0; ja < a[ia].length; ja++) {
        // For each element of a, multiply it by all the elements of b.
        for (int ib = 0; ib < b.length; ib++) {
          for (int jb = 0; jb < b[ib].length; jb++) {
             c[b.length*ia+ib][b[ib].length*ja+jb] = a[ia][ja] * b[ib][jb];
          }
        }
      }
    }

    // Return the completed product matrix c.
    return c;
  }

  /**
   * Print an image obtained from an integer matrix, using the specified
   * characters to indicate non-zero and zero elements.
   * @param m The matrix to print.
   * @param nz The character to print for a non-zero element.
   * @param z The character to print for a zero element.
   */
  public static void show_matrix(final int[][] m, final char nz, final char z) {
    for (int im = 0; im < m.length; im++) {
      for (int jm = 0; jm < m[im].length; jm++) {
        System.out.print(m[im][jm] == 0 ? z : nz);
      }
      System.out.println();
    }
  }

  /**
   * Compute the specified Kronecker product power
   * of the matrix and return  it.
   * @param m The matrix to raise to the power.
   * @param n The power to which to raise the matrix.
   * @return A new matrix containing the resulting power.
   */
  public static int[][] power(final int[][] m, final int n) {
    // Start with m itself as the first power.
    int[][] m_pow = m;
    // Start the iteration with 1, not 0,
    // since we already have the first power.
    for (int ix = 1; ix < n; ix++) {
      m_pow = product(m, m_pow);
    }
    return m_pow;
  }

  /**
   * Run a test by computing the specified Kronecker product power
   * of the matrix and printing matrix and power.
   * @param m The base matrix raise to the power.
   * @param n The power to which to raise the matrix.
   */
  private static void test(final int[][] m, final int n) {
    System.out.println("Test matrix");
    show_matrix(m, '*', ' ');
    final int[][] m_pow = power(m, n);
    System.out.println("Matrix power " + n);
    show_matrix(m_pow, '*', ' ');
  }

  /**
   * Create the matrix for the first test and run the test.
   */
  private static void test1() {
    // Create the matrix.
    final int[][] m = {{0, 1, 0},
                       {1, 1, 1},
                       {0, 1, 0}};
    // Run the test.
    test(m, 4);
  }

  /**
   * Create the matrix for the second test and run the test.
   */
  private static void test2() {
    // Create the matrix.
    final int[][] m = {{1, 1, 1},
                       {1, 0, 1},
                       {1, 1, 1}};
    // Run the test.
    test(m, 4);
  }

  /**
   * Create the matrix for the second test and run the test.
   */
  private static void test3() {
    // Create the matrix.
    final int[][] m = {{1, 0, 1},
                       {1, 0, 1},
                       {0, 1, 0}};
    // Run the test.
    test(m, 4);
  }

  /**
   * Run the program to run the three tests.
   * @param args Command line arguments (not used).
   */
  public static void main(final String[] args) {
    // Test the product fractals.
    test1();
    test2();
    test3();
  }

}
Output:

This output uses 50% font size. Of course, it shows ASCII height distortion.

Test matrix
 * 
***
 * 
Matrix power 4
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
*********************************************************************************
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
Test matrix
***
* *
***
Matrix power 4
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
Test matrix
* *
* *
 * 
Matrix power 4
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
   * *               * *                                 * *               * *   
   * *               * *                                 * *               * *   
    *                 *                                   *                 *    
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
   * *               * *                                 * *               * *   
   * *               * *                                 * *               * *   
    *                 *                                   *                 *    
         * *   * *                                             * *   * *         
         * *   * *                                             * *   * *         
          *     *                                               *     *          
         * *   * *                                             * *   * *         
         * *   * *                                             * *   * *         
          *     *                                               *     *          
            * *                                                   * *            
            * *                                                   * *            
             *                                                     *             
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
   * *               * *                                 * *               * *   
   * *               * *                                 * *               * *   
    *                 *                                   *                 *    
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
* *   * *         * *   * *                           * *   * *         * *   * *
* *   * *         * *   * *                           * *   * *         * *   * *
 *     *           *     *                             *     *           *     * 
   * *               * *                                 * *               * *   
   * *               * *                                 * *               * *   
    *                 *                                   *                 *    
         * *   * *                                             * *   * *         
         * *   * *                                             * *   * *         
          *     *                                               *     *          
         * *   * *                                             * *   * *         
         * *   * *                                             * *   * *         
          *     *                                               *     *          
            * *                                                   * *            
            * *                                                   * *            
             *                                                     *             
                           * *   * *         * *   * *                           
                           * *   * *         * *   * *                           
                            *     *           *     *                            
                           * *   * *         * *   * *                           
                           * *   * *         * *   * *                           
                            *     *           *     *                            
                              * *               * *                              
                              * *               * *                              
                               *                 *                               
                           * *   * *         * *   * *                           
                           * *   * *         * *   * *                           
                            *     *           *     *                            
                           * *   * *         * *   * *                           
                           * *   * *         * *   * *                           
                            *     *           *     *                            
                              * *               * *                              
                              * *               * *                              
                               *                 *                               
                                    * *   * *                                    
                                    * *   * *                                    
                                     *     *                                     
                                    * *   * *                                    
                                    * *   * *                                    
                                     *     *                                     
                                       * *                                       
                                       * *                                       
                                        *                                        

JavaScript

Using Version #1 of Kronecker product in JavaScript.

Works with: Chrome
File:VicsekFractaljs.png
Output VicsekFractaljs.png
File:SierpCarpetFractaljs.png
Output SierpCarpetFractaljs.png
File:CheckbrdFractaljs.png
Output CheckbrdFractaljs.png
// KPF.js 6/23/16 aev
// HFJS: Plot any matrix mat (filled with 0,1)
function pmat01(mat, color) {
  // DCLs
  var cvs = document.getElementById('canvId');
  var ctx = cvs.getContext("2d"); 
  var w = cvs.width; var h = cvs.height;
  var m = mat[0].length; var n = mat.length;
  // Cleaning canvas and setting plotting color 
  ctx.fillStyle="white"; ctx.fillRect(0,0,w,h);
  ctx.fillStyle=color;
  // MAIN LOOP
  for(var i=0; i<m; i++) {
    for(var j=0; j<n; j++) {
      if(mat[i][j]==1) { ctx.fillRect(i,j,1,1)};
    }//fend j
  }//fend i
}//func end
// Prime functions:
// Create Kronecker product based fractal matrix rm from matrix m (order=ord)
function ckpbfmat(m,ord) {
  var rm=m;
  for(var i=1; i<ord; i++) {rm=mkp(rm,m)};
  //matpp2doc('R 4 ordd',rm,'*'); // ASCII "plotting" - if you wish to try.
  return(rm);
}
// Create and plot Kronecker product based fractal from matrix m (filled with 0/1)
function cpmat(m,ord,color) {
  var kpr;
  kpr=ckpbfmat(m,ord);
  pmat01(kpr,color);
}
// Fractal matrix "pretty" printing to document. 
// mat should be filled with 0 and 1; chr is a char substituting 1.
function matpp2doc(title,mat,chr) {
  var i,j,re='',e; var m=mat.length; var n=mat[0].length;
  document.write('&nbsp;&nbsp;<b>'+title+'</b>:<pre>');
  for(var i=0; i<m; i++) {
    for(var j=0; j<n; j++) {
      e='&nbsp;'; if(mat[i][j]==1) {e=chr}; re+=e; 
    }//fend j
    document.write('&nbsp;&nbsp;'+re+'<br />'); re='';
  }//fend i
  document.write('</pre>');
}
// mkp function (exotic arrow function): Return the Kronecker product
// of the a and b matrices
mkp=(a,b)=>a.map(a=>b.map(b=>a.map(y=>b.map(x=>r.push(y*x)),t.push(r=[]))),t=[])&&t;
Required tests
<!-- VicsekFractal.html -->
<html>
<head>
  <title>Vicsek fractal</title>
  <script src="KPF.js"></script>
</head>
<body onload="cpmat([[0,1,0],[1,1,1],[0,1,0]],6,'navy')">
   <h3>Vicsek fractal</h3>
   <a href="SierpCarpetFractal.html"> Next: Sierpinski carpet fractal</a><br />
   <canvas id="canvId" width="750" height="750" style="border: 1px outset;"></canvas>
</body></html>
<!-- SierpCarpetFractal.html -->
<html>
<head>
  <title>Sierpinski carpet fractal</title>
  <script src="KPF.js"></script>
</head>
<body onload="cpmat([[1,1,1],[1,0,1],[1,1,1]],6,'brown')">
   <h3>Sierpinski carpet fractal</h3>
   <a href="Checkerboard.html"/> Next: Checkerboard </a><br />
   <canvas id="canvId" width="750" height="750" style="border: 1px outset;"></canvas>
</body></html>
<!-- Checkerboard.html -->
<html>
<head>
  <title>Checkerboard</title>
  <script src="KPF.js"></script>
</head>
<body onload="cpmat([[0,1,0,1],[1,0,1,0],[0,1,0,1],[1,0,1,0]],5,'black')">
   <h3>Checkerboard</h3>
   <a href="VicsekFractal.html"/> Next: Vicsek fractal </a><br />
   <canvas id="canvId" width="750" height="750" style="border: 1px outset;"></canvas>
</body></html>
Output:
Page VicsekFractal.html with VicsekFractaljs.png
Page SierpCarpetFractal.html with SierpCarpetFractaljs.png
Page Checkerboard.html with CheckbrdFractaljs.png

Julia

Works with: Julia version 0.6

Julia has a builtin function `kron`:

function matkronpow(M::Matrix, n::Int)
    P = copy(M)
    for i in 1:n P = kron(P, M) end
    return P
end

function fracprint(M::Matrix)
    for i in 1:size(M, 1)
        for j in 1:size(M, 2)
            print(M[i, j] == 1 ? '*' : ' ')
        end
        println()
    end
end

M = [0 1 0; 1 1 1; 0 1 0]
matkronpow(M, 3) |> fracprint

M = [1 1 1; 1 0 1; 1 1 1]
matkronpow(M, 3) |> fracprint
Output:
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
*********************************************************************************
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************

Kotlin

This reuses code from the Kronecker_product#Kotlin task.

// version 1.2.31

typealias Matrix = Array<IntArray>

fun kroneckerProduct(a: Matrix, b: Matrix): Matrix {
    val m = a.size
    val n = a[0].size
    val p = b.size
    val q = b[0].size
    val rtn = m * p
    val ctn = n * q
    val r: Matrix = Array(rtn) { IntArray(ctn) } // all elements zero by default
    for (i in 0 until m)
        for (j in 0 until n)
            for (k in 0 until p)
                for (l in 0 until q)
                    r[p * i + k][q * j + l] = a[i][j] * b[k][l]
    return r
}

fun kroneckerPower(a: Matrix, n: Int): Matrix {
    var pow = a.copyOf()
    for (i in 1 until n) pow = kroneckerProduct(pow, a)
    return pow
}

fun printMatrix(text: String, m: Matrix) {
    println("$text fractal :\n")
    for (i in 0 until m.size) {
        for (j in 0 until m[0].size) {
            print(if (m[i][j] == 1) "*" else " ")
        }
        println()
    }
    println()
}

fun main(args: Array<String>) {
    var a = arrayOf(
        intArrayOf(0, 1, 0),
        intArrayOf(1, 1, 1),
        intArrayOf(0, 1, 0)
    )
    printMatrix("Vicsek", kroneckerPower(a, 4))

    a = arrayOf(
        intArrayOf(1, 1, 1),
        intArrayOf(1, 0, 1),
        intArrayOf(1, 1, 1)
    )
    printMatrix("Sierpinski carpet", kroneckerPower(a, 4))
}
Output:
Vicsek fractal :

                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
*********************************************************************************
 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
    *        *        *        *        *        *        *        *        *    
   ***      ***      ***      ***      ***      ***      ***      ***      ***   
    *        *        *        *        *        *        *        *        *    
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
          *  *  *                    *  *  *                    *  *  *          
         *********                  *********                  *********         
          *  *  *                    *  *  *                    *  *  *          
             *                          *                          *             
            ***                        ***                        ***            
             *                          *                          *             
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                            *  *  *  *  *  *  *  *  *                            
                           ***************************                           
                            *  *  *  *  *  *  *  *  *                            
                               *        *        *                               
                              ***      ***      ***                              
                               *        *        *                               
                                        *                                        
                                       ***                                       
                                        *                                        
                                     *  *  *                                     
                                    *********                                    
                                     *  *  *                                     
                                        *                                        
                                       ***                                       
                                        *                                        

Sierpinski carpet fractal :

*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************

Lua

Needs LÖVE 2D Engine

function prod( a, b )
    local rt, l = {}, 1
    for m = 1, #a do
        for p = 1, #b do
            rt[l] = {}
            for n = 1, #a[m] do
                for q = 1, #b[p] do
                    table.insert( rt[l], a[m][n] * b[p][q] )
                end
            end
            l = l + 1
        end
    end
    return rt
end
function love.load()
    wid, hei = love.graphics.getWidth(), love.graphics.getHeight()
    canvas = love.graphics.newCanvas( wid, hei )
    mA = { {0,1,0}, {1,1,1}, {0,1,0} }; mB = { {1,0,1}, {0,1,0}, {1,0,1} }
    mC = { {1,1,1}, {1,0,1}, {1,1,1} }; mD = { {1,1,1}, {0,1,0}, {1,1,1} }
end
function drawFractals( m )
    love.graphics.setCanvas( canvas )
    love.graphics.clear()
    love.graphics.setColor( 255, 255, 255 )
    for j = 1, #m do
        for i = 1, #m[j] do
            if m[i][j] == 1 then 
                love.graphics.points( i * .1, j * .1 )
            end
        end
    end
    love.graphics.setCanvas()
end
function love.keypressed( key, scancode, isrepeat )
    local t = {}
    if key == "a" then
        print( "Build Vicsek fractal I" ); t = mA
    elseif key == "b" then 
        print( "Build Vicsek fractal II" ); t = mB
    elseif key == "c" then 
        print( "Sierpinski carpet fractal" ); t = mC
    elseif key == "d" then 
        print( "Build 'H' fractal" ); t = mD
    else return
    end
    for i = 1, 3 do t = prod( t, t ) end
    drawFractals( t )
end
function love.draw()
    love.graphics.draw( canvas )
end

Mathematica/Wolfram Language

m = {{0, 1, 0}, {1, 1, 1}, {0, 1, 0}};
ArrayPlot[KroneckerProduct[m, m, m, m]]
m = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
ArrayPlot[KroneckerProduct[m, m, m, m]]
m = {{0, 1, 1}, {1, 0, 1}, {1, 1, 0}};
ArrayPlot[KroneckerProduct[m, m, m, m]]
Output:

Outputs three graphical visualisations of the three 4th order products.

Maxima

Using function defined in Kronecker product task page. [Kronecker Product]

pow_kron(matr,n):=block(MATR:copymatrix(matr),
for i from 1 thru n do MATR:altern_kronecker(matr,MATR),
MATR);

/* Examples (images are shown in format png)*/
/* A to generate Vicsek fractal */
/* B to generate Sierpinski carpet fractal */
A:matrix([0,1,0],[1,1,1],[0,1,0])$
B:matrix([1,1,1],[1,0,1],[1,1,1])$

/* Vicsek */
pow_kron(A,3)$
at(%,[0="",1="x"]);

/* Sierpinski carpet */
pow_kron(B,3)$
at(%,[0="",1="x"]);
File:Vicsek.png
File:SierpinskiCarpet.png

Nim

Translation of: Kotlin
import sequtils

type Matrix[T] = seq[seq[T]]

func kroneckerProduct[T](a, b: Matrix[T]): Matrix[T] =
  result = newSeqWith(a.len * b.len, newSeq[T](a[0].len * b[0].len))
  let m = a.len
  let n = a[0].len
  let p = b.len
  let q = b[0].len
  for i in 0..<m:
    for j in 0..<n:
      for k in 0..<p:
        for l in 0..<q:
          result[i * p + k][j * q + l] = a[i][j] * b[k][l]

func kroneckerPower(m: Matrix; n: int): Matrix =
  result = m
  for i in 2..n:
    result = kroneckerProduct(result, m)

func `$`(m: Matrix): string =
  for row in m:
    for val in row:
      result.add if val == 0: "  " else: " *"
    result.add '\n'


type B = range[0..1]

const A1: Matrix[B] = @[@[B 0, 1, 0], @[B 1, 1, 1], @[B 0, 1, 0]]
echo "Vicsek fractal:\n", A1.kroneckerPower(4)
echo ""
const A2: Matrix[B] = @[@[B 1, 1, 1], @[B 1, 0, 1], @[B 1, 1, 1]]
echo "Sierpinski carpet fractal:\n", A2.kroneckerPower(4)
Output:
Vicsek fractal:
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                                           *     *     *                                                                          
                                                                         * * * * * * * * *                                                                        
                                                                           *     *     *                                                                          
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                               *                 *                 *                                                              
                                                             * * *             * * *             * * *                                                            
                                                               *                 *                 *                                                              
                                                         *     *     *     *     *     *     *     *     *                                                        
                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                      
                                                         *     *     *     *     *     *     *     *     *                                                        
                                                               *                 *                 *                                                              
                                                             * * *             * * *             * * *                                                            
                                                               *                 *                 *                                                              
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                                           *     *     *                                                                          
                                                                         * * * * * * * * *                                                                        
                                                                           *     *     *                                                                          
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                           *                                                     *                                                     *                          
                         * * *                                                 * * *                                                 * * *                        
                           *                                                     *                                                     *                          
                     *     *     *                                         *     *     *                                         *     *     *                    
                   * * * * * * * * *                                     * * * * * * * * *                                     * * * * * * * * *                  
                     *     *     *                                         *     *     *                                         *     *     *                    
                           *                                                     *                                                     *                          
                         * * *                                                 * * *                                                 * * *                        
                           *                                                     *                                                     *                          
         *                 *                 *                 *                 *                 *                 *                 *                 *        
       * * *             * * *             * * *             * * *             * * *             * * *             * * *             * * *             * * *      
         *                 *                 *                 *                 *                 *                 *                 *                 *        
   *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *  
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
   *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *  
         *                 *                 *                 *                 *                 *                 *                 *                 *        
       * * *             * * *             * * *             * * *             * * *             * * *             * * *             * * *             * * *      
         *                 *                 *                 *                 *                 *                 *                 *                 *        
                           *                                                     *                                                     *                          
                         * * *                                                 * * *                                                 * * *                        
                           *                                                     *                                                     *                          
                     *     *     *                                         *     *     *                                         *     *     *                    
                   * * * * * * * * *                                     * * * * * * * * *                                     * * * * * * * * *                  
                     *     *     *                                         *     *     *                                         *     *     *                    
                           *                                                     *                                                     *                          
                         * * *                                                 * * *                                                 * * *                        
                           *                                                     *                                                     *                          
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                                           *     *     *                                                                          
                                                                         * * * * * * * * *                                                                        
                                                                           *     *     *                                                                          
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                               *                 *                 *                                                              
                                                             * * *             * * *             * * *                                                            
                                                               *                 *                 *                                                              
                                                         *     *     *     *     *     *     *     *     *                                                        
                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                      
                                                         *     *     *     *     *     *     *     *     *                                                        
                                                               *                 *                 *                                                              
                                                             * * *             * * *             * * *                                                            
                                                               *                 *                 *                                                              
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                
                                                                           *     *     *                                                                          
                                                                         * * * * * * * * *                                                                        
                                                                           *     *     *                                                                          
                                                                                 *                                                                                
                                                                               * * *                                                                              
                                                                                 *                                                                                


Sierpinski carpet fractal:
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * *
 *   *       *   *                   *   *       *   * *   *       *   *                   *   *       *   * *   *       *   *                   *   *       *   *
 * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   *                                                       *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * *                                                       * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   *                                                       *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * *                                                       * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   *                                                       *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * * * * * * * *                   * * * * * * * * *                                                       * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   *                                                       *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * *                                                       * * * * * * * * *                   * * * * * * * * *
 * * *       * * *                   * * *       * * *                                                       * * *       * * *                   * * *       * * *
 *   *       *   *                   *   *       *   *                                                       *   *       *   *                   *   *       *   *
 * * *       * * *                   * * *       * * *                                                       * * *       * * *                   * * *       * * *
 * * * * * * * * *                   * * * * * * * * *                                                       * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   *                                                       *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * *                                                       * * * * * * * * *                   * * * * * * * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   *                                                       *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * *                                                       * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   *                                                       *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * *                                                       * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   *                                                       *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * *                                                       * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * *
 *   *       *   *                   *   *       *   * *   *       *   *                   *   *       *   * *   *       *   *                   *   *       *   *
 * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * * * * *       * * *                   * * *       * * *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   * *   * *   * *   *                   *   * *   * *   *
 * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * * * * * * * * * * *                   * * * * * * * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   * *   *       *   *
 * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * * * * *       * * *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   * *   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

PARI/GP

Note
Works with: PARI/GP version 2.9.1 and above
File:VicsekFractalgp.png
Output VicsekFractalgp.png
File:SierpCarpetFractalgp.png
Output SierpCarpetFractalgp.png
File:SierpTriFractalgp.png
Output SierpTriFractalgp.png
\\ Build block matrix applying Kronecker product to the special matrix m
\\ (n times to itself). Then plot Kronecker fractal. 4/25/2016 aev
pkronfractal(m,n=2,clr)={
  my(r=m);
  for(i=1,n, r=matkronprod(r,m));
  iPlotmat(r,clr);
}
\\Requireq tests:
{\\ Vicsek fractal: VicsekFractalgp.png
  my(M=[0,1,0;1,1,1;0,1,0]); print(" *** Vicsek fractal, order 4:");
  pkronfractal(M,4,6);
}
{\\ Sierpinski carpet fractal:  SierpCarpetFractalgp.png
  my(M=[1,1,1;1,0,1;1,1,1]); print(" *** Sierpinski carpet fractal, order 4:");
  pkronfractal(M,4,5);
}
{\\ Sierpinski triangle fractal:  SierpTriFractalgp.png
  my(M=[1,1;0,1]); print(" *** Sierpinski triangle fractal, order 7:");
  pkronfractal(M,7,6);
}
Output:
 *** Vicsek fractal, order 4:
 *** matrix(243x243) 3125 DOTS

 *** Sierpinski carpet fractal, order 4:
 *** matrix(243x243) 32768 DOTS 

 *** Sierpinski triangle fractal, order 7:
 *** matrix: 256x256, 6561 DOTS

Perl

Translation of: Raku
use Imager;
use Math::Cartesian::Product;

sub kronecker_product {
    our @a; local *a = shift;
    our @b; local *b = shift;
    my @c;
    cartesian {
        my @cc;
        cartesian {
            push @cc, $_[0] * $_[1];
        } [@{$_[0]}], [@{$_[1]}];
        push @c, [@cc];
    } [@a], [@b];
    @c
}

sub kronecker_fractal {
    my($order, @pattern) = @_;
    my @kronecker = @pattern;
    @kronecker = kronecker_product(\@kronecker, \@pattern) for 0..$order-1;
    @kronecker
}

@vicsek = ( [0, 1, 0], [1, 1, 1], [0, 1, 0] );
@carpet = ( [1, 1, 1], [1, 0, 1], [1, 1, 1] );
@six    = ( [0,1,1,1,0], [1,0,0,0,1], [1,0,0,0,0], [1,1,1,1,0], [1,0,0,0,1], [1,0,0,0,1], [0,1,1,1,0] );

for (['vicsek', \@vicsek, 4],
     ['carpet', \@carpet, 4],
     ['six',    \@six,    3]) {
    ($name, $shape, $order) = @$_;
    @img = kronecker_fractal( $order, @$shape );
    $png = Imager->new(xsize => 1+@{$img[0]}, ysize => 1+@img);
    cartesian {
        $png->setpixel(x => $_[0], y => $_[1], color => $img[$_[1]][$_[0]] ? [255, 255, 32] : [16, 16, 16]);
    } [0..@{$img[0]}-1], [0..$#img];
    $png->write(file => "run/kronecker-$name-perl6.png");
}

See Kronecker-Vicsek, Kronecker-Carpet and Kronecker-Six images.

Phix

function kronecker(sequence a, b)
    integer ar = length(a),
            ac = length(a[1]),
            br = length(b),
            bc = length(b[1])
    sequence res = repeat(repeat(0,ac*bc),ar*br)
    for ia=1 to ar do
        integer i0 = (ia-1)*br
        for ja=1 to ac do
            integer j0 = (ja-1)*bc
            for ib=1 to br do
                integer i = i0+ib
                for jb=1 to bc do
                    integer j = j0+jb
                    res[i,j] = a[ia,ja]*b[ib,jb]
                end for
            end for
        end for
    end for
    return res
end function
 
function kroneckern(sequence m, integer n)
    sequence res = m
    for i=2 to n do
        res = kronecker(res,m)
    end for
    return res
end function
 
procedure show(sequence m)
    for i=1 to length(m) do
        string s = repeat(' ',length(m[i]))
        for j=1 to length(s) do
            if m[i][j] then s[j] = '#' end if
        end for 
        puts(1,s&"\n")
    end for
    puts(1,"\n")
end procedure
 
constant vicsek = {{0,1,0},
                   {1,1,1},
                   {0,1,0}},
         siercp = {{1,1,1},
                   {1,0,1},
                   {1,1,1}},
         xxxxxx = {{0,1,1},
                   {0,1,0},
                   {1,1,0}}
 
show(kroneckern(vicsek,4))
show(kroneckern(siercp,4))
show(kroneckern(xxxxxx,4))

Output same as Julia/Kotlin/Factor

Python

Generate images of the fractals using PIL.

Using only python lists

import os
from PIL import Image


def imgsave(path, arr):
    w, h = len(arr), len(arr[0])
    img = Image.new('1', (w, h))
    for x in range(w):
        for y in range(h):
            img.putpixel((x, y), arr[x][y])
    img.save(path)


def get_shape(mat):
    return len(mat), len(mat[0])


def kron(matrix1, matrix2):
    """
    Calculate the kronecker product of two matrices
    """
    final_list = []

    count = len(matrix2)

    for elem1 in matrix1:
        for i in range(count):
            sub_list = []
            for num1 in elem1:
                for num2 in matrix2[i]:
                    sub_list.append(num1 * num2)
            final_list.append(sub_list)

    return final_list


def kronpow(mat):
    """
    Generate an arbitrary number of kronecker powers
    """
    matrix = mat
    while True:
        yield matrix
        matrix = kron(mat, matrix)


def fractal(name, mat, order=6):
    """
    Save fractal as jpg to 'fractals/name'
    """
    path = os.path.join('fractals', name)
    os.makedirs(path, exist_ok=True)

    fgen = kronpow(mat)
    print(name)
    for i in range(order):
        p = os.path.join(path, f'{i}.jpg')
        print('Calculating n =', i, end='\t', flush=True)

        mat = next(fgen)
        imgsave(p, mat)

        x, y = get_shape(mat)
        print('Saved as', x, 'x', y, 'image', p)


test1 = [
    [0, 1, 0],
    [1, 1, 1],
    [0, 1, 0]
]

test2 = [
    [1, 1, 1],
    [1, 0, 1],
    [1, 1, 1]
]

test3 = [
    [1, 0, 1],
    [0, 1, 0],
    [1, 0, 1]
]

fractal('test1', test1)
fractal('test2', test2)
fractal('test3', test3)

Because this is not very efficent/fast you should use scipy sparse matrices instead

import os
import numpy as np
from scipy.sparse import csc_matrix, kron
from scipy.misc import imsave


def imgsave(name, arr, *args):
    imsave(name, arr.toarray(), *args)


def get_shape(mat):
    return mat.shape


def kronpow(mat):
    """
    Generate an arbitrary number of kronecker powers
    """
    matrix = mat
    while True:
        yield matrix
        matrix = kron(mat, matrix)


def fractal(name, mat, order=6):
    """
    Save fractal as jpg to 'fractals/name'
    """
    path = os.path.join('fractals', name)
    os.makedirs(path, exist_ok=True)

    fgen = kronpow(mat)
    print(name)
    for i in range(order):
        p = os.path.join(path, f'{i}.jpg')
        print('Calculating n =', i, end='\t', flush=True)

        mat = next(fgen)
        imgsave(p, mat)

        x, y = get_shape(mat)
        print('Saved as', x, 'x', y, 'image', p)


test1 = [
    [0, 1, 0],
    [1, 1, 1],
    [0, 1, 0]
]

test2 = [
    [1, 1, 1],
    [1, 0, 1],
    [1, 1, 1]
]

test3 = [
    [1, 0, 1],
    [0, 1, 0],
    [1, 0, 1]
]

test1 = np.array(test1, dtype='int8')
test1 = csc_matrix(test1)

test2 = np.array(test2, dtype='int8')
test2 = csc_matrix(test2)

test3 = np.array(test3, dtype='int8')
test3 = csc_matrix(test3)

fractal('test1', test1)
fractal('test2', test2)
fractal('test3', test3)

R

Generate and plot 3 Kronecker product based fractals.
Note: Find plotmat() and plotv2() here on Helper Functions page.

Works with: R version 3.3.2 and above
File:VicsekFractalR.png
Output VicsekFractalR.png
File:SierpCarpetFR.png
Output SierpCarpetFR.png
File:PlusSignFR.png
Output PlusSignFR.png
## Generate and plot Kronecker product based fractals. aev 8/12/16
## gpKronFractal(m, n, pf, clr, ttl, dflg=0, psz=600):
## Where: m - initial matrix (filled with 0/1); n - order of the fractal;
## pf - plot file name (without extension); clr - color; ttl - plot title;
## dflg - writing dump file flag (0/1); psz - picture size.
gpKronFractal <- function(m, n, pf, clr, ttl, dflg=0, psz=600) {
  cat(" *** START:", date(), "n=", n, "clr=", clr, "psz=", psz, "\n");
  cat(" *** Plot file -", pf, "\n");
  r <- m;
  for(i in 1:n) {r = r%x%m};
  plotmat(r, pf, clr, ttl, dflg, psz);
  cat(" *** END:", date(), "\n");
}

## Required tests:
# 1. Vicsek Fractal
M <- matrix(c(0,1,0,1,1,1,0,1,0), ncol=3, nrow=3, byrow=TRUE);
gpKronFractal(M, 4, "VicsekFractalR","red", "Vicsek Fractal n=4")
# 2. Sierpinski carpet fractal
M <- matrix(c(1,1,1,1,0,1,1,1,1), ncol=3, nrow=3, byrow=TRUE);
gpKronFractal(M, 4, "SierpinskiCarpetFR", "maroon", "Sierpinski carpet fractal n=4")

# 3. Plus sign fractal
M <- matrix(c(1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,
+0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1), ncol=7, nrow=7, byrow=TRUE);
gpKronFractal(M, 3, "PlusSignFR", "maroon", "Plus sign fractal, n=3")

# Also, try these 3. I bet you've never seen them before.
# 4. Wider Sierpinski carpet fractal (a.k.a. Sierpinski carpet mutant)
# Note: If your computer is not super fast it could take a lot of time.
#       Use dump flag = 1, to save generated fractal.
#M <- matrix(c(1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1), ncol=5,
#+nrow=5, byrow=TRUE);
#gpKronFractal(M, 4, "SierpinskiCarpetFw", "brown", "Wider Sierpinski carpet fractal n=4", 1)
# 5. "H" fractal (Try all other letters in the alphabet...)
#M <- matrix(c(1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,
#+0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1), ncol=7, nrow=7, byrow=TRUE);
#gpKronFractal(M, 3, "HFR", "maroon", "'H' fractal n=3", 1)
# 6. Chessboard fractal. 
#M <- matrix(c(1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
#     0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1), ncol=8, nrow=8, byrow=TRUE);
#gpKronFractal(M, 2, "ChessBrdFractalR","black", "Chessboard Fractal, n=2")
Output:
> M <- matrix(c(0,1,0,1,1,1,0,1,0), ncol=3, nrow=3, byrow=TRUE);
> gpKronFractal(M, 4, "VicsekFractalR", "red", "Vicsek Fractal n=4")
 *** START: Mon Aug 29 16:14:14 2016 n= 4 clr= red 
 *** Plot file - VicsekFractalR 
 *** Matrix( 243 x 243 ) 3125  DOTS
 *** END: Mon Aug 29 16:14:14 2016 

> M <- matrix(c(1,1,1,1,0,1,1,1,1), ncol=3, nrow=3, byrow=TRUE);
> gpKronFractal(M, 4, "SierpinskiCarpetFR", "maroon", "Sierpinski carpet fractal n=4")
 *** START: Mon Aug 29 16:16:14 2016 n= 4 clr= maroon 
 *** Plot file - SierpinskiCarpetFR
 *** Matrix( 243 x 243 ) 32768  DOTS
 *** END: Mon Aug 29 16:16:32 2016 

> M <- matrix(c(1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,
+0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1), ncol=7, nrow=7, byrow=TRUE);
> gpKronFractal(M, 3, "PlusSignFR", "maroon", "Plus sign fractal, n=3")
 *** START: Thu Apr 06 21:45:33 2017 n= 3 clr= maroon psz= 600 
 *** Plot file - PlusSignFR 
 *** Matrix( 2401 x 2401 ) 2560000 DOTS
 *** END: Fri Apr 07 09:31:07 2017 

Raku

(formerly Perl 6)

Works with: Rakudo version 2018.09
sub kronecker-product ( @a, @b ) { (@a X @b).map: { (.[0].list X* .[1].list).Array } }

sub kronecker-fractal ( @pattern, $order = 4 ) {
    my @kronecker = @pattern;
    @kronecker = kronecker-product(@kronecker, @pattern) for ^$order;
    @kronecker
}

use Image::PNG::Portable;

#Task requirements
my @vicsek = ( [0, 1, 0], [1, 1, 1], [0, 1, 0] );
my @carpet = ( [1, 1, 1], [1, 0, 1], [1, 1, 1] );
my @six    = ( [0,1,1,1,0], [1,0,0,0,1], [1,0,0,0,0], [1,1,1,1,0], [1,0,0,0,1], [1,0,0,0,1], [0,1,1,1,0] );

for  'vicsek', @vicsek, 4,
     'carpet', @carpet, 4,
     'six',    @six,    3
  -> $name,    @shape,  $order {
    my @img = kronecker-fractal( @shape, $order );
    my $png = Image::PNG::Portable.new: :width(@img[0].elems), :height(@img.elems);
    (^@img[0]).race(:12batch).map: -> $x {
        for ^@img -> $y {
            $png.set: $x, $y, |( @img[$y;$x] ?? <255 255 32> !! <16 16 16> );
        }
    }
    $png.write: "kronecker-{$name}-perl6.png";
}

See Kronecker-Vicsek, Kronecker-Carpet and Kronecker-Six images.

REXX

This is a work-in-progress, this version shows the 1st order.

/*REXX program calculates the   Kronecker product   of   two arbitrary size   matrices. */
parse arg pGlyph .                               /*obtain optional argument from the CL.*/
if pGlyph=='' | pGlyph==","  then pGlyph= '█'    /*Not specified?  Then use the default.*/
if length(pGlyph)==2  then pGlyph= x2c(pGlyph)   /*Plot glyph is 2 chars?   Hexadecimal.*/
if length(pGlyph)==3  then pGlyph= d2c(pGlyph)   /*  "    "    " 3   "      Decimal.    */
       aMat= 3x3  0 1 0 1 1 1 0 1 0              /*define  A  matrix size  and elements.*/
       bMat= 3x3  1 1 1 1 0 1 1 1 1              /*   "    B     "     "    "     "     */
call makeMat 'A', aMat                           /*construct   A   matrix from elements.*/
call makeMat 'B', bMat                           /*    "       B      "     "     "     */
call KronMat 'Kronecker product'                 /*calculate the  Kronecker  product.   */
call showMat 'Kronecker product', result         /*display   the  Kronecker  product.   */
exit                                             /*stick a fork in it,  we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
KronMat: parse arg what;              #= 0;           parse var  @.a.shape  aRows  aCols
                                                      parse var  @.b.shape  bRows  bCols
           do       rA=1  for aRows
             do     rB=1  for bRows;  #= # + 1;       ##= 0;         _=
               do   cA=1  for aCols;  x= @.a.rA.cA
                 do cB=1  for bCols;  y= @.b.rB.cB;   ##= ## + 1;   xy= x * y;     _= _ xy
                 @.what.#.##= xy
                 end   /*cB*/
               end     /*cA*/
             end       /*rB*/
           end         /*rA*/;        return aRows * aRows   ||   'X'   ||   bRows * bRows
/*──────────────────────────────────────────────────────────────────────────────────────*/
makeMat: parse arg what, size elements;   arg , row 'X' col .;      @.what.shape= row  col
         #=0;    do   r=1  for row               /* [↓]  bump item#; get item; max width*/
                   do c=1  for col;   #= # + 1;        @.what.r.c= word(elements, #)
                   end   /*c*/                   /* [↑] define an element of WHAT matrix*/
                 end     /*r*/;           return
/*──────────────────────────────────────────────────────────────────────────────────────*/
showMat: parse arg what, size .;   parse var size  row  'X'  col   /*obtain mat name, sz*/
                     do    r=1  for row;    $=                     /*build row by row.  */
                        do c=1  for col;    $= $ || @.what.r.c     /*  "   col  " col.  */
                        end   /*c*/
                     $= translate($, pGlyph, 10)                   /*change──►plot glyph*/
                     say strip($, 'T')                             /*display line──►term*/
                     end     /*r*/;       return
output   when using the default input:
   ███
   █ █
   ███
█████████
█ ██ ██ █
█████████
   ███
   █ █
   ███

Rust

Because Rust lacks support for images, this sample contains a simple implementation of writing PPM files.

use std::{
    fmt::{Debug, Display, Write},
    ops::Mul,
};

// Rust has (almost) no built-in support for multi-dimensional arrays or so.
// Let's make a basic one ourselves for our use cases.

#[derive(Clone, Debug)]
pub struct Mat<T> {
    col_count: usize,
    row_count: usize,
    items: Vec<T>,
}

impl<T> Mat<T> {
    pub fn from_vec(items: Vec<T>, col_count: usize, row_count: usize) -> Self {
        assert_eq!(items.len(), col_count * row_count, "mismatching dimensions");

        Self {
            col_count,
            row_count,
            items,
        }
    }

    pub fn row_count(&self) -> usize {
        self.row_count
    }

    pub fn col_count(&self) -> usize {
        self.col_count
    }

    pub fn iter(&self) -> impl Iterator<Item = &T> {
        self.items.iter()
    }

    pub fn row_iter(&self, row: usize) -> impl Iterator<Item = &T> {
        assert!(row < self.row_count, "index out of bounds");
        let start = row * self.col_count;
        self.items[start..start + self.col_count].iter()
    }

    pub fn col_iter(&self, col: usize) -> impl Iterator<Item = &T> {
        assert!(col < self.col_count, "index out of bounds");
        self.items.iter().skip(col).step_by(self.col_count)
    }
}

impl<T: Display> Display for Mat<T> {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        // Compute the width of the widest item first
        let mut len = 0usize;
        let mut buf = String::new();
        for item in (0..self.row_count).flat_map(|row| self.row_iter(row)) {
            buf.clear();
            write!(buf, "{}", item)?;
            len = std::cmp::max(len, buf.chars().count());
        }

        // Then render the matrix with proper padding

        len += 1; // To separate cells
        let width = len * self.col_count + 1;
        writeln!(f, "┌{:width$}┐", "", width = width)?;

        for row in (0..self.row_count).map(|row| self.row_iter(row)) {
            write!(f, "│")?;

            for item in row {
                write!(f, "{:>width$}", item, width = len)?;
            }

            writeln!(f, " │")?;
        }

        write!(f, "└{:width$}┘", "", width = width)
    }
}

// Rust standard libraries have no graphics support. If we want to render
// an image, we can write, e.g., a PPM file.

impl<T> Mat<T> {
    pub fn write_ppm(
        &self,
        f: &mut dyn std::io::Write,
        rgb: impl Fn(&T) -> (u8, u8, u8),
    ) -> std::io::Result<()> {
        let bytes = self
            .iter()
            .map(rgb)
            .flat_map(|(r, g, b)| {
                use std::iter::once;
                once(r).chain(once(g)).chain(once(b))
            })
            .collect::<Vec<u8>>();

        write!(f, "P6\n{} {}\n255\n", self.col_count, self.row_count)?;
        f.write_all(&bytes)
    }
}

mod kronecker {

    use super::Mat;
    use std::ops::Mul;

    // Look ma, no numbers! We can combine anything with Mul (see later)

    pub fn product<T, U>(a: &Mat<T>, b: &Mat<U>) -> Mat<<T as Mul<U>>::Output>
    where
        T: Clone + Mul<U>,
        U: Clone,
    {
        let row_count = a.row_count() * b.row_count();
        let col_count = a.col_count() * b.col_count();
        let mut items = Vec::with_capacity(row_count * col_count);

        for i in 0..a.row_count() {
            for k in 0..b.row_count() {
                for a_x in a.row_iter(i) {
                    for b_x in b.row_iter(k) {
                        items.push(a_x.clone() * b_x.clone());
                    }
                }
            }
        }

        Mat::from_vec(items, col_count, row_count)
    }

    pub fn power<T>(m: &Mat<T>, n: u32) -> Mat<T>
    where
        T: Clone + Mul<T, Output = T>,
    {
        match n {
            0 => m.clone(),
            _ => (1..n).fold(product(&m, &m), |result, _| product(&result, &m)),
        }
    }
}

// Here we make a char-like type with Mul implementation.
// We can do fancy things with that later.

#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
struct Char(char);

impl Char {
    fn space() -> Self {
        Char(' ')
    }

    fn is_space(&self) -> bool {
        self.0 == ' '
    }
}

impl Display for Char {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        Display::fmt(&self.0, f)
    }
}

impl Mul for Char {
    type Output = Self;

    #[allow(clippy::suspicious_arithmetic_impl)]
    fn mul(self, rhs: Self) -> Self {
        if self.is_space() || rhs.is_space() {
            Char(' ')
        } else {
            self
        }
    }
}

fn main() -> std::io::Result<()> {

    // Vicsek rendered in numbers

    #[rustfmt::skip]
    let vicsek = Mat::<u8>::from_vec(vec![
        0, 1, 0,
        1, 1, 1,
        0, 1, 0,
    ], 3, 3);

    println!("{}", vicsek);
    println!("{}", kronecker::power(&vicsek, 3));

    // We could render something by mapping the numbers to
    // something else. But we could compute with something
    // else directly, right?
    let s = Char::space();
    let b = Char('\u{2588}');

    #[rustfmt::skip]
    let sierpienski = Mat::from_vec(vec![
        b, b, b,
        b, s, b,
        b, b, b,
    ], 3, 3);

    println!("{}", sierpienski);
    println!("{}", kronecker::power(&sierpienski, 3));

    #[rustfmt::skip]
    let matrix = Mat::from_vec(vec![
        s, s, b, s, s,
        s, b, b, b, s,
        b, s, b, s, b,
        s, s, b, s, s,
        s, b, s, b, s,
    ], 5, 5,);

    println!("{}", kronecker::power(&matrix, 1));

    // This is nicer as an actual image
    kronecker::power(&matrix, 4).write_ppm(
        &mut std::fs::OpenOptions::new()
            .write(true)
            .create(true)
            .truncate(true)
            .open("kronecker_power.ppm")?,
        |&item| {
            if item.is_space() {
                (0, 0, 32)
            } else {
                (192, 192, 0)
            }
        },
    )
}

Sidef

Translation of: Raku
func kronecker_product (a, b) { a ~X b -> map { _[0] ~X* _[1] } }

func kronecker_fractal(pattern, order=4) {
    var kronecker = pattern
    { kronecker = kronecker_product(kronecker, pattern) } * order
    return kronecker
}

var vicsek = [[0,1,0], [1,1,1], [0,1,0]]
var carpet = [[1,1,1], [1,0,1], [1,1,1]]
var six    = [[0,1,1,1,0], [1,0,0,0,1], [1,0,0,0,0],
              [1,1,1,1,0], [1,0,0,0,1], [1,0,0,0,1], [0,1,1,1,0]]

require("Imager")

for name,shape,order in [
    [:vicsek, vicsek, 4],
    [:carpet, carpet, 4],
    [:six,    six,    3],
] {
    var pat = kronecker_fractal(shape, order)
    var img = %O<Imager>.new(xsize => pat[0].len, ysize => pat.len)
    for x,y in (^pat[0].len ~X ^pat.len) {
        img.setpixel(x => x, y => y, color => (pat[y][x] ? <255 255 32> : <16 16 16>))
    }
    img.write(file => "kronecker-#{name}-sidef.png")
}

Output images: Kronecker Carpet, Kronecker Vicsek and Kronecker Six

Wren

Translation of: Kotlin
Library: Wren-matrix
import "./matrix" for Matrix

var kroneckerPower = Fn.new { |m, n|
    var pow = m.copy()
    for (i in 1...n) pow = pow.kronecker(m)
    return pow
}

var printMatrix = Fn.new { |text, m|
    System.print("%(text) fractal :\n")
    for (i in 0...m.numRows) {
        for (j in 0...m.numCols) {
            System.write((m[i][j] == 1) ? "*" : " ")
        }
        System.print()
    }
    System.print()
}

var m = Matrix.new([ [0, 1, 0], [1, 1, 1], [0, 1, 0] ])
printMatrix.call("Vicsek", kroneckerPower.call(m, 4))
m = Matrix.new([ [1, 1, 1], [1, 0, 1], [1, 1, 1] ])
printMatrix.call("Sierpinski carpet", kroneckerPower.call(m, 4))
Output:
Same as Kotlin entry.

zkl

Uses Image Magick and the PPM class from http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#zkl

var [const] GSL=Import.lib("zklGSL");    // libGSL (GNU Scientific Library)
fcn kronecker(A,B){  //--> new Matrix
   m,n, p,q := A.rows,A.cols, B.rows,B.cols;
   r:=GSL.Matrix(m*p, n*q);
   foreach i,j,k,l in (m,n,p,q){ r[p*i + k, q*j + l]=A[i,j]*B[k,l] }
   r
}

fcn kfractal(M,n,fname){
   R:=M;
   do(n){ R=kronecker(R,M) }
   r,c,img := R.rows, R.cols, PPM(r,c,0xFFFFFF);    // white canvas
   foreach i,j in (r,c){ if(R[i,j]) img[i,j]=0x00FF00 } // green dots
   println("%s: %dx%d with %,d points".fmt(fname,R.rows,R.cols,
        R.pump(0,Ref(0).inc,Void.Filter).value)); // count 1s in fractal matrix
   img.writeJPGFile(fname);
}
var [const] A=GSL.Matrix(3,3).set(0,1,0, 1,1,1, 0,1,0),
            B=GSL.Matrix(3,3).set(1,1,1, 1,0,1, 1,1,1);
kfractal(A,4,"vicsek_k.jpg");
kfractal(B,4,"sierpinskiCarpet_k.jpg");
Output:
vicsek_k.jpg: 243x243 with 3,125 points
sierpinskiCarpet_k.jpg: 243x243 with 32,768 points

Images at Vicsek fractal and Sierpinski Carpet fractal.